"关于在VBA或VBScript中滥用On Error Resume Next的讨论" 在编程过程中,特别是使用Visual Basic for Applications (VBA) 和 Visual Basic Scripting Edition (VBScript)时,`On Error Resume Next` 是一个错误处理语句,它允许程序在遇到错误时继续执行下一行代码,而不是立即停止。然而,过度或不恰当的使用`On Error Resume Next`可能会导致诸多问题,如标题和描述中提到的“滥用”。 `On Error Resume Next` 的主要作用是在可能出现错误的代码块中启用错误处理。当它被激活时,如果出现错误,程序不会停止,而是会跳过错误并继续执行后面的代码。这对于处理可能出错但希望程序能够继续运行的场景非常有用,例如在尝试打开一个可能不存在的文件时。 然而,滥用`On Error Resume Next`会导致以下问题: 1. **隐藏错误**:最明显的后果是它会掩盖实际的错误,使得开发者难以定位和修复问题。当错误发生时,如果没有适当的错误处理机制,开发者可能无法获取到错误信息,导致调试困难。 2. **性能下降**:错误处理代码可能会导致不必要的计算或操作,尤其是在循环结构中。如示例代码所示,如果在执行数据库查询时出错,`On Error Resume Next` 会使得程序继续尝试,可能导致CPU占用率飙升,因为错误的代码段会持续执行。 3. **资源浪费**:错误处理可能导致内存泄漏或其他资源未正确释放。在示例中,如果没有正确关闭连接或记录集,可能会占用大量内存,尤其是当错误处理导致这些资源无法正常关闭时。 4. **程序不可预测性**:由于错误被忽略,程序的行为可能变得难以预料,可能会触发其他未预期的错误或异常。 5. **降低代码质量**:过度依赖`On Error Resume Next`会鼓励编写不健壮的代码,因为它降低了对编写无错误代码的压力。良好的编程实践是尽量避免错误发生,而不是依赖于错误处理。 正确的做法是尽量减少对`On Error Resume Next`的使用,只在必须捕获和处理错误的地方使用。通常,应该结合`On Error GoTo 0`来禁用错误处理,或者使用`On Error GoTo 错误处理标签`来指定错误发生时应跳转到的特定代码段进行处理。这样可以确保在遇到错误时,开发者能获取到有用的错误信息,并有机会适当地处理错误,而不是让程序盲目地继续执行。 `On Error Resume Next` 是一把双刃剑,合理使用可以增强程序的容错能力,但过度使用则可能导致诸多问题。因此,开发过程中应注重代码质量,尽量避免和修复错误,而非依赖错误处理来掩盖问题。
2007年10月15日 星期一 下午 02:41
on error resume next 这条语句是用来屏蔽出错信息,当出错时,使得程序继续执行的,不过在使用中,似乎很多人没有考虑到on error resume next的作用范围.比如
<%
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db.mdb")
If Err.Number<>0 Then Response.Write "数据库连接发生错误" : Response.End
Set Rs=conn.execute("Select * from 表")
Do While Not rs.eof
response.write rs(0)
rs.movenext
loop
%>
类似上面的代码,如果错误是发生在建立数据连接的时候,那么程序会按照我们设想的那样停止执行,给出出错信息,但假如是在set rs=conn.execute("select * from 表")这里出错呢?这个时候on error resume next仍然在起作用,这时候,一个占用cpu 100%的死循环就出现了,结果呢,如果服务器设置的好,那顶多你自己的站点无法访问了,如果服务器设置不够严格,那整个服务器的站点都要遭殃,结果就是空间商停掉你的空间.
代码改造一下
<%
Dim conn
Sub connect
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦