当前位置: 首页 > news >正文

asp中容错语句的使用

如下代码:

On Error Resume Next
1=1-1
On Error GoTo 0
Response.Write("程序出错啦!!")

 

On Error Resume Next      容错语句,只使用这一句话本页面将不会出现错误。

On Error GoTo 0        如果出现了错误,则运行此语句下的第1行。

Err.Description       出错内容

Err.Number            出错数目

Err.Clear             清除错误

应用:可以使用容错+数据库约束的方法,达到保持数据完整性的目的。(在最近的OA办公系统中使用成功。)

详细例子
1、最基本的错误提示

dim  i
=   1 / 0


结果:

Microsoft VBScript 运行时错误 错误 '800a000b' 
被零除 
/try.asp,行 3 

2、防止系统的错误提示
使用on error resume next,可以放置系统提示错误,并且好像什么都没有发生一样,沉默的运行下去

on   error   resume   next
dim  i
=   1 / 0


运行结果:


3、检查系统的错误
使用了on error resume next之后,如果出错Err对象中将放置最近一次出错的信息。Err对象重要的属性有三个:Number, Source, Description。分别是错误号,错误来源,错误描述。你能捕获的都是运行时错误,而且If Err then这样的写法等价于If Err.Number then

on   error   resume   next
dim  i
=   1 / 0
execute   " test"
Response.Write Err.Description


运行结果:
类型不匹配

可以看到,提示的并不是被零除

4、让系统重新接管错误的处理
on error goto 0 ,使用这条语句会让系统不再沉默,一旦有错误发生就会提示错误,并结束脚本执行。

on   error   resume   next
dim  i
=   1 / 0
Response.Write 
" 1"
on   error   goto   0
=   1 / 0
Response.Write 
" 2 "

 


运行结果:

Microsoft VBScript 运行时错误 错误 '800a000b' 
被零除 
/try.asp,行 7 

可以看到,第一个1输出了,第二个没有。

5、on error resume next对子程序的影响
先看例子

sub  test()
    
dim  i
     i 
=   1 / 0
     Response.Write 
" ok"
end sub
sub  test1()
     test
     Response.Write 
" ok"
end sub
on   error   resume   next
test1

运行结果是:


两个ok都没有被打印。因为on error resume next是在最完成下达的,所以当调用的子程序中出了问题之后,那些子程序后面的部分无权处理,是由最完成的代码来完成,会直接从子程序中跳出。

6、on error resume next对子程序的影响(2)
还是看例子

sub  test()
    
on   error   resume   next
    
dim  i
     i 
=   1 / 0
     Response.Write 
"  3  "  
end sub
sub  test1()
     test
     Response.Write 
"  2 "
end sub
on   error   resume   next
test1
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一致,其影响都是局限在子程序内部的。

sub  test()
    
on   error   goto   0
end sub
on   error   resume   next
test
dim  i
=   1 / 0

运行结果:


可见test()中的on error goto 0并不能把它的影响带到上层去。

9、Err对象的赋值
Err对象会在运行时错误发生的时候赋予新的值,旧的值会被舍弃。
Err对象不会受到函数调用的影响,它完全是全局的。
Err对象可以用Clear方法清空
任何时候调用on error resume next或者on error goto 0的时候,都会清空Err对象

10、小结
可见这个错误处理系统只能勉强用来获得运行时错误的信息,个人感觉很不方便,所以很难把程序的错误处理基于这样一个的怪异系统之上。

相关文章:

  • 防止SQL注入
  • 解决ASP防SQL注入攻击程序问题
  • Discuz7.X通杀0day(UCenter Home-2.0) poc
  • Kracker路由器破解工具
  • 代码之美 - 如何写出优雅的PHP代码
  • Mysql数据库的安全设置方法大全
  • Struts 2实现文件过滤
  • ewebeditor安全解决方案
  • 文件上传过滤
  • 拦截器实现文件过滤(JSP)
  • LFI本地包含漏洞利用小技巧
  • MSSQL注入防范安全策略大全
  • NWebsec 1.0.3 The Security library for ASP.NET
  • 详细MSSQL注入语句
  • Microsoft IIS 短文件名/目录名 枚举漏洞
  • 自己简单写的 事件订阅机制
  • ➹使用webpack配置多页面应用(MPA)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android组件 - 收藏集 - 掘金
  • C语言笔记(第一章:C语言编程)
  • Debian下无root权限使用Python访问Oracle
  • ES6--对象的扩展
  • hadoop集群管理系统搭建规划说明
  • PHP 的 SAPI 是个什么东西
  • python学习笔记-类对象的信息
  • React 快速上手 - 07 前端路由 react-router
  • React+TypeScript入门
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Cloud中负载均衡器概览
  • vue中实现单选
  • yii2中session跨域名的问题
  • 百度小程序遇到的问题
  • 从零开始学习部署
  • 给第三方使用接口的 URL 签名实现
  • 简单数学运算程序(不定期更新)
  • 码农张的Bug人生 - 初来乍到
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 深入浏览器事件循环的本质
  • 数据结构java版之冒泡排序及优化
  • 我有几个粽子,和一个故事
  • 线性表及其算法(java实现)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define,static,const,三种常量的区别
  • (52)只出现一次的数字III
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Matlab)使用竞争神经网络实现数据聚类
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (TOJ2804)Even? Odd?
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (新)网络工程师考点串讲与真题详解
  • ... 是什么 ?... 有什么用处?
  • .java 9 找不到符号_java找不到符号