ASP & VBScript的错误处理
2005-08-27 09:29
429 查看
ASP & VBScript的错误处理 在VBScript中,与错误处理相关的三者:on error resume next, on error goto 0, Err
1、最基本的错误提示
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
结果:
Microsoft VBScript 运行时错误 错误 '800a000b'
被零除
/try.asp,行 3
2、防止系统的错误提示
使用on error resume next,可以放置系统提示错误,并且好像什么都没有发生一样,沉默的运行下去
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
运行结果:
空
3、检查系统的错误
使用了on error resume next之后,如果出错Err对象中将放置最近一次出错的信息。Err对象重要的属性有三个:Number, Source, Description。分别是错误号,错误来源,错误描述。你能捕获的都是运行时错误,而且If Err then这样的写法等价于If Err.Number then
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
execute "test"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write Err.Description
运行结果:
类型不匹配
可以看到,提示的并不是被零除
4、让系统重新接管错误的处理
on error goto 0 ,使用这条语句会让系统不再沉默,一旦有错误发生就会提示错误,并结束脚本执行。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "1"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error goto 0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "2"
运行结果:
1
Microsoft VBScript 运行时错误 错误 '800a000b'
被零除
/try.asp,行 7
可以看到,第一个1输出了,第二个没有。
5、on error resume next对子程序的影响
先看例子
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "ok"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "ok"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test1
运行结果是:
空
两个ok都没有被打印。因为on error resume next是在最完成下达的,所以当调用的子程序中出了问题之后,那些子程序后面的部分无权处理,是由最完成的代码来完成,会直接从子程序中跳出。
6、on error resume next对子程序的影响(2)
还是看例子
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 3 "
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 2 "
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 1 "
执行的结果是:
3 2 1
可见在test()中用了on error resume next之后,这个子程序中这条语句之后的错误都将自己来处理,但是Err对象在退出了这个函数时并不会被清空,在test1和底层中仍然能够通过Err对象来知道test()的错误的发生。
7、对on error resume next行为的解释
a、执行了on error resume next之后,在这之后的所有代码产生的“未宽恕”的错误都不会中断代码的执行
b、如果没有执行on error resume next,所有“未宽恕”的错误都会导致程序的控制流程往上层流转,如果当前是最底层了则由系统打印错误。
c、“未宽恕”的错误导致流程往上层流转,如果上层的子程序是在on error resume next之后调用了这个产生错误的子函数的,则这个“未宽恕”的错误变成了“宽恕”的错误,不再影响程序的流程。
d、on error resume next的作用其实是局限于一个子程序中的,它只能保证使用了这个语句之后,在这个子程序内的程序流程不会受到运行时错误的影响。而它并不会影响上层和下层的错误处理逻辑。
8、on error goto 0的行为与on error resume next一致,其影响都是局限在子程序内部的。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error goto 0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
运行结果:
空
可见test()中的on error goto 0并不能把它的影响带到上层去。
9、Err对象的赋值
Err对象会在运行时错误发生的时候赋予新的值,旧的值会被舍弃。
Err对象不会受到函数调用的影响,它完全是全局的。
Err对象可以用Clear方法清空
任何时候调用on error resume next或者on error goto 0的时候,都会清空Err对象
10、小结
可见这个错误处理系统只能勉强用来获得运行时错误的信息,个人感觉很不方便,所以很难把程序的错误处理基于这样一个的怪异系统之上。
1、最基本的错误提示
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
结果:
Microsoft VBScript 运行时错误 错误 '800a000b'
被零除
/try.asp,行 3
2、防止系统的错误提示
使用on error resume next,可以放置系统提示错误,并且好像什么都没有发生一样,沉默的运行下去
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
运行结果:
空
3、检查系统的错误
使用了on error resume next之后,如果出错Err对象中将放置最近一次出错的信息。Err对象重要的属性有三个:Number, Source, Description。分别是错误号,错误来源,错误描述。你能捕获的都是运行时错误,而且If Err then这样的写法等价于If Err.Number then
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
execute "test"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write Err.Description
运行结果:
类型不匹配
可以看到,提示的并不是被零除
4、让系统重新接管错误的处理
on error goto 0 ,使用这条语句会让系统不再沉默,一旦有错误发生就会提示错误,并结束脚本执行。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "1"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error goto 0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "2"
运行结果:
1
Microsoft VBScript 运行时错误 错误 '800a000b'
被零除
/try.asp,行 7
可以看到,第一个1输出了,第二个没有。
5、on error resume next对子程序的影响
先看例子
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "ok"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write "ok"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test1
运行结果是:
空
两个ok都没有被打印。因为on error resume next是在最完成下达的,所以当调用的子程序中出了问题之后,那些子程序后面的部分无权处理,是由最完成的代码来完成,会直接从子程序中跳出。
6、on error resume next对子程序的影响(2)
还是看例子
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 3 "
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 2 "
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Response.Write " 1 "
执行的结果是:
3 2 1
可见在test()中用了on error resume next之后,这个子程序中这条语句之后的错误都将自己来处理,但是Err对象在退出了这个函数时并不会被清空,在test1和底层中仍然能够通过Err对象来知道test()的错误的发生。
7、对on error resume next行为的解释
a、执行了on error resume next之后,在这之后的所有代码产生的“未宽恕”的错误都不会中断代码的执行
b、如果没有执行on error resume next,所有“未宽恕”的错误都会导致程序的控制流程往上层流转,如果当前是最底层了则由系统打印错误。
c、“未宽恕”的错误导致流程往上层流转,如果上层的子程序是在on error resume next之后调用了这个产生错误的子函数的,则这个“未宽恕”的错误变成了“宽恕”的错误,不再影响程序的流程。
d、on error resume next的作用其实是局限于一个子程序中的,它只能保证使用了这个语句之后,在这个子程序内的程序流程不会受到运行时错误的影响。而它并不会影响上层和下层的错误处理逻辑。
8、on error goto 0的行为与on error resume next一致,其影响都是局限在子程序内部的。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
sub test()
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error goto 0
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end sub
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
on error resume next
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
test
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dim i
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
i = 1/0
运行结果:
空
可见test()中的on error goto 0并不能把它的影响带到上层去。
9、Err对象的赋值
Err对象会在运行时错误发生的时候赋予新的值,旧的值会被舍弃。
Err对象不会受到函数调用的影响,它完全是全局的。
Err对象可以用Clear方法清空
任何时候调用on error resume next或者on error goto 0的时候,都会清空Err对象
10、小结
可见这个错误处理系统只能勉强用来获得运行时错误的信息,个人感觉很不方便,所以很难把程序的错误处理基于这样一个的怪异系统之上。
相关文章推荐
- asp.net访问access 发生了未处理的异常 "操作必须使用一个可更新的查询"错误
- 对"ASP.NET的错误类型及错误处理方式"的补充
- Microsoft VBScript 运行时错误 (0x800A0046) 没有权限: 'GetObject' /localstart.asp, 第 40 行 错误解决办法
- 关于ASP出现Microsoft VBScript 编译器错误 错误 '800a03f6'等错误
- ASP.Net发布到IIS中出现错误: 处理程序"PageHandlerFactory-Integrated"在其模块列表中有一个错误模块"ManagedPipelineHandler"
- ASP.NET错误处理的方式(整理&总结)
- 处理ASP.NET"正在中止线程"错误
- asp Microsoft VBScript 运行时错误 错误 '800a0046'
- 在ASP 调用 VB.net 编写的dll 出错 提示:Microsoft VBScript 运行时错误 错误 '800a01ad' ActiveX 部件不能创建对象
- ASP & VBScript的错误处理
- Request 对象 错误 'ASP 0104 : 80004005' 不允许操作错误的处理
- 链接sqlserver的时候出现 "Error establishing socket" 错误的处理办法.
- ASP.NET使用Global.asax进行全局错误处理
- “无法显示XML页”,处理资源 '*http://localhost/Asp.net/Default.aspx' 时出错。
- 错误处理error C4996: 'fopen': This function or variable may be unsafe
- ASP错误捕获的几种常规处理方式
- Response 对象 错误 'ASP 0251 : 80004005'
- ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面
- offer题11 数值的整数次方&判断浮点型是否相等&降低求n次方的时间复杂度&3种错误处理方式
- 水晶报表中"已达到系统管理员配置的最大报表处理作业数限制"错误的处理