版权归原作者所有,如有侵权,请联系我们

[科普中国]-错误捕获

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

运行时错误是VB编程中的一种错误,应用程序正在运行期间,当一个语句试图执行一个不能执行的操作时就会发生运行时错误。比较常见的有一个除法运算的除数为零,尽管在语法看来程序语句没有错误,但在实际上这条语句不能执行。

程序运行中的错误,一旦出现将造成程序崩溃,无法继续执行。因此我们必须对可能发生的运行时错误加以处理,也就是在系统发出警告之前,截获该错误,在错误处理程序中提示用户采取行动,是解决问题还是取消操作。如果用户解决了问题,程序就能够继续执行,如果用户选择取消操作,则可以跳出这段程序,继续执行后面的程序。这就是处理运行时错误的方法,这个过程称为错误捕获。1

错误捕获的转向语句Visual Basic提供的On Error语句是用来检测运行过程中的错误,是处理可捕获错误的基础语句,该系列语句可启动错误处理程序,也可用于禁止错误处理程序。如果不使用“On Error”系列语句,那么任何运行时错误都可能使程序崩溃,即显示错误信息并中止运行。2

On Error语句通常被置于事件过程中认为可能会出现错误的任何语句之前,当应用程序运行中遇到错误时,语句会告诉它转向某错误处理分枝语句进行处理。每个错误处理程序都有自己的标号,跟一个冒号以供辨认,例如ErrorHandlerl:或WinsockError:。每个错误处理程序包含两个部分:第一部分通常是在一个分枝结构(例如If...Th T或Select Case语句)中使用Err. Number属性进行判断,然后借助Err. Description属性显示一条用户信息或根据错误类型设置某个属性;第二部分是Resume语句,该语句将控制权返回给程序,使程序得以继续运行。3

On Error GoTo Line语句该语句用于启动错误处理程序,且程序需从必要的“line”参数中指定的位置开始。"line"参数可为任何行标或行号。如发生运行时错误,即出现了可捕获的错误时,则程序会跳转至"line"处并激活错误处理程序。需注意,指定的“line"参数必须和On Error语句在一个过程中,否则会发生编译错误。4

0n Error Resume Next语句该语句的功能是忽略错误,继续往下执行。它激活错误捕获功能,但并不指定错误处理程序。当发生错误时,不做任何处理,直接执行产生错误的下一行程序。该语句会使程序从紧随产生错误的语句之后的语句继续执行,或是从紧随最近一次调用含有On Error Resume Next语句过程的语句继续运行。这个语句可以置运行时错误于不顾,使程序得以继续执行。此时,可以将错误处理程序放置在错误发生的地方,而不必传递到过程中的其他位置。在调用另一个过程时,On Error Resume Next语句成为非活动的,所以如果希望在例程中进行嵌入错误处理,则应在每一个调用的例程中执行On Error Resume Next语句。

0n Error GoTo 0语句此语句用来强制性取消捕获功能,错误捕获功能一旦被激活,就停止程序的执行。如果要关闭错误捕获,使用该语句。如果在过程中激活了错误捕获,则当过程完成执行时,错误捕获会自动无效。但是,当过程中的代码一直在执行时,想要关闭过程中的错误捕获,就应使用该语句。5

错误处理程序错误处理程序是应用程序中捕获和响应错误的例程,对于可能会出错的任何过程均要对这些过程添加错误处理程序。以下是一个通用的错误处理程序:

执行一些代码

设置错误捕获

On Error GoTo CheckError

执行一些代码,这些代码有可能会触发错误

退出子过程

Exit Sub

CheckError:

错误处理程序5

设计错误处理程序设计错误处理程序一般通过捕获错误、编写错误处理例程和退出错误处理例程三个步骤来完成。

设置错误捕获当错误发生时,通知应用程序在分支点(执行错误处理例程的地方)设置或激活错误捕获,使用On Error语句来捕获错误。当VB执行该语句时就激活了错误捕获。当包含错误捕获的过程是活动的时候,错误捕获始终是激活的,直到该过程执行Exit Sub、Exit函数、Exit属性、End Sub、End函数或End属性语句时,错误捕获才停。尽管在任一时刻任一过程只能激活一个错误捕获,但可建立几个供选择的错误捕获并在不同的时刻激活不同的错误捕获。

编写错误处理例程编写错误处理例程要添加行标签,行标签表示错误处理例程开始。行标签应该有一个具有描述性的名称,其后必须加冒号。一般情况下,把错误处理代码放置在过程末端,该过程在紧靠行标签前方处具有ExitSub、Exit函数或Exit属性语句。如果未出现错误,则过程可避免执行错误处理例程。

VB中的Err对象是专门用来进行错误处理的对象,该对象中包含了程序所发生错误的各种信息。在错误处理例程中可使用包含数值代码的Err对象的Number属性,该代码代表最新的运行错误。

退出错误处理例程在处理完错误之后,应退出错误处理例程。有四种方法可以退出错误处理例程:

(1) Resume[0]语句:使用该语句之后,对于出错的语句,或者对于最近曾执行过程调用的语句,程序会在改正产生错误的条件之后,恢复这些语句。

(2) Resume Next语句:使用该语句,错误发生在包含错误处理例程的过程之外,而且所调用的过程不具有激活的错误处理例程,则在调用了出现错误的过程之后的那条语句处,执行恢复。

(3) Resume line语句:使用该语句,将会退出错误处理例程,并在指定行标签的地方恢复语句的执行。

(4) Err对象的Raise方法:使用Err对象的Raise方法可以触发运行时错误。在错误处理例程内执行这一语句时, VB将会搜索另一个错误处理例程的调用列表,将当前的错误交由另一个错误处理例程来进行处理。5