vbScript on error resume next容错使用心得
发布时间:2010-06-26 19:28:00
vbscript中,错误处理使用on error resume next来完成,如果在你的代码里加入这一句,在这句之后的其他代码如果出现错误,系统将忽略这些错误继续运行后面的代码,同时,我们可以使用下面的代码来捕获错误
If err.number<>0 then
errNum = Err.Number
errDesc = Err.Description
Call G00B02logOut("Error.002", errNum ,errDesc )
End If
If err.number<>0 then
errNum = Err.Number
errDesc = Err.Description
Call G00B02logOut("Error.002", errNum ,errDesc )
End If
这样可以捕获到错误代码和错误的描述信息,并写入日志文件。然 而,有个问题是,在我们捕获了这个错误之后的代码,如果再出现错误而你没有捕获的话,代码仍然会忽略错误继续运行。忽略错误是我们不希望看到的结果,将导致程序调试困难。此时可以使用 On Error GoTo 0 这句来终止前面错误处理,即可以和on error resume next 成对出现。这样就不会影响后面的代码了。
on error resume Next
。。。
'DB operate。。
。。。
If err.number<>0 then
errNum = Err.Number
errDesc = Err.Description
Call G00B02logOut("Error.002", errNum ,errDesc )
End If
On Error Goto 0
on error resume Next
。。。
'DB operate。。
。。。
If err.number<>0 then
errNum = Err.Number
errDesc = Err.Description
Call G00B02logOut("Error.002", errNum ,errDesc )
End If
On Error Goto 0
有几个特点需要了解,
1,on error resume Next如果在全局定义,则作用是全局的,你在主程序中使用了这一句,后面如果调用了一个函数,那么函数中如果有错误,也将被忽略,你在主程序中函数调用的语句后面也可以捕获到这个错误,这一点可以通过下面简单的代码验证:
On error resume Next
funcb ‘调用函数
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
WScript.Echo "main ...."
'On Error Goto 0
Sub funcb
aaaaaaaaaaa '测试用的无效语句
WScript.Echo "funcb ok"
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
End
On error resume Next
funcb ‘调用函数
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
WScript.Echo "main ...."
'On Error Goto 0
Sub funcb
aaaaaaaaaaa '测试用的无效语句
WScript.Echo "funcb ok"
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
End
执行以上代码的结果:
13 - 型が一致しません。
main ....
可以看出,在函数中,aaaaaaaaaaa是故意制造的一个错误,其后的WScript.Echo "funcb ok"以及后面的代码都没有执行。但是,主程序中的WScript.Echo "main ...."语句是执行了的。就是说,在函数中如果某个语句出错,函数中后面的语句都不执行,直接执行调用函数的语句后面的语句。
2,On error resume Next如果在函数内定义,看下面的代码执行情况
funcb ‘函数调用
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
WScript.Echo "main ...."
Sub funcb ‘函数定义
On error resume Next
aaaaaaaaaaaa '无效语句
WScript.Echo "funcb ok"
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
End Sub
funcb ‘函数调用
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
WScript.Echo "main ...."
Sub funcb ‘函数定义
On error resume Next
aaaaaaaaaaaa '无效语句
WScript.Echo "funcb ok"
If err.Number <> 0 Then
errNum = Err.Number
errDesc = Err.Description
WScript.Echo errNum & " - " & errDesc
End If
End Sub
执行结果如下:
funcb ok
13 - 型が一致しません。
13 - 型が一致しません。
main ....
可以看到,函数体内的err对象和调用它的主程序中都可以捕获到这个错误,这说明err对象是全局的,应该这么理解,err的作用范围在一个On error resume Next语句和一个On Error Goto 0之间有效。如果我们在funcb调用语句的后面在加一个无效语句,执行时会弹出错误msg框,说明函数体内的On error resume Next不能作用到函数体外。
以上是使用On error resume Next的一些体会,如果了解了上面两点,就可以较好的使用错误处理的功能了。


猜你喜欢
- 更新 2016/8/9:最近发现目标网站已经屏蔽了这个
- 前言一个程序语言在运行的过程中,变量的声明在整个程序的生命周期中,是不断在进行的过程。任何程序的计算都会涉及至少一个变量,而计算的结果的则可
- 方法一【推荐】、用js插入flash,可防止虚线框激活建立一个ShowFlash.js文件,拷贝以下代码:function sho
- 实例如下所示:u = array([[1,2],[3,4]])m = u.tolist()#转换为listm.remove(m[0])#移除
- 客户的一台服务器出现Raid故障,经过我们的努力,数据基本恢复成功,但是其中的一个SQL Server日志文件(扩展名LDF)损坏严重,基本
- 严格来说,Having并不需要一个子表,但没有子表的Having并没有实际意义。如果你只需要一个表,那么你可以用Where子句达到一切目的。
- 1、操作步骤(1)打开文件读取整个文件函数open返回一个表示文件的对象,对象存储在infile中。关键字with在不需要访问文件时将其自动
- 函数调用方法:numpy.array(object, dtype=None)各个参数意义:object:创建的数组的对象,可以为单个值,列表
- 1.apache 在如下页面下载apache的for Linux 的源码包 http://www
- pandas是什么?是它吗?。。。。很显然pandas没有这个家伙那么可爱。。。。我们来看看pandas的官网是怎么来定义自己的:panda
- 一、功能实现对学生对个人信息的增删查改实现后台对所有学生信息的操作二、平台windows+pycharm(python开发工具)三、逻辑框图
- 前言第一次用mysql,打开mysql的图形化界面要连接时,出现2003错误。究其原因,可能是mysql的服务没有启动。本文章主要围绕这个解
- 1、把这段拷到DW里,存成HTML文件。<HTML><HEAD><TITLE>move backgrou
- 前言腾讯《Go安全指南》中提到【必须】nil指针判断:进行指针操作时,必须判断该指针是否为nil,防止程序panic,尤其在进行结构体Unm
- 一、php中pcntl_fork函数概述pcntl_fork()函数是php中用于创建子进程的一个函数,返回创建的子进程的pid。该函数创建
- 本文实例讲述了Python实现随机创建电话号码的方法。分享给大家供大家参考,具体如下:当需要随机的生成一些电话号码的时候,可以使用以下脚本,
- 在多线程的使用时,为了线程的顺利进行,我们会使用函数来对某个线程进行暂停运行。在多线程中有两个函数可以实现sleep和wait,不过它们在使
- MySQL性能优化在互联网公司MySQL的使用非常广泛,大家经常会有MySQL性能优化方面的需求。整理了一些在MySQL优化方面的实用技巧。
- 每次装完系统之后都要重新安装一些软件,安装软件的时候又要上网查找安装的教程,比较麻烦,所以就自己整理了mysql-8.0.15-winx64
- //--------------------弹出层------------------- //popDivId:弹出层div的ID //dr