Working Practice-错误处理技术

本文参考自《代码大全》

代码中不应该发生的错误:

  1. 可以使用断言

代码中可能发生的错误:

  1. 返回中立值(无伤害的默认值)
  2. 换用下一个正确的数据。
    • 数据库记录发现其中一条损坏,可以继续读下去,直到读到一条正确的。
  3. 返回前一个相同的数据。
    • 温度计每秒获取100次时,当第33次获取失败的时候,可以使用第32次的,毕竟变化较小。
  4. 换用最接近合法的值:
    • 如有效值为0~100时,对于负数-2,可以返回0作为其值。
  5. 把警告信息记录到日志文件中。
  6. 返回一个错误码。
  7. 显示错误信息:注意不要告诉潜在的攻击者太多信息。
  8. 关闭程序。适用于safety-critical的应用问题,例如药品用量的计算,宁愿让程序崩溃,也比开错药强。

[原创技术分享]VB6错误处理进阶(同过程中多次错误处理)

06-04

VB6错误处理进阶(同过程中多次错误处理):rn近日,看到本VB论坛里又有学友提起错误处理的事,于是把前一阵开发中整理的一些经验,以代码的形式提供如下:rnrn简单的只需要在同一过程中做一次错误处理的代码很容易写,一般用 On Error GoTo 结构,就连那个著名的免费VB6开发插件mztools中都提供了这种自动添加错误处理块的菜单,处理结果如下:rnrnrn[code=vb]Private Sub TestError1()rn rn On Error GoTo TestError1_Errorrnrn '这里开始是实际要编辑的功能代码rnrn On Error GoTo 0rn rn Exit Subrn rnTestError1_Error:rn rn MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure TestError1 of Form Form1"rnEnd Sub[/code]rnrn这东西好是好用,但要注意,他只适合在同一过程中处理一次错误,要像其它有try...except...finally...end结构的语言一样,能在同一过程中多次处理错误,就要费另一番苦心了,好在这里本人已参考msdn library等资料,加上本人的反复测试,总结出示例代码如下:rnrn[code=vb]Private Sub Command1_Click()rn Test多次错误处理rnEnd SubrnrnPrivate Sub Test多次错误处理()rn Dim i As Long, iTotalFile As Long, iOkFile As Longrn Dim sOldFileName As String, sNewFileName As Stringrn iTotalFile = 4rn iOkFile = 0rn For i = 1 To iTotalFilern sOldFileName = "file" & i & ".ini"rn sNewFileName = "file" & i & ".txt"rn10 On Error GoTo errFileNamern Call RenameFile(sOldFileName, sNewFileName)rn iOkFile = iOkFile + 1rn GoTo lblNextFilernerrFileName:rnrn Resume lblNextFilernlblNextFile:rn On Error GoTo 0 '这一句最好别省略。虽然因为后面马上会执行到的第10行,含有了它的功能,所以可以省去rn Next irn MsgBox "共有" & iTotalFile & "个文件被处理,其中" & iOkFile & "个文件改名成功!"rnEnd Subrn'这里表示比较可能产生多种多次错误的一种应用:批量改文件名。而且常见的可能的错误有多种,不是只做一下判断原文件是否rn'存在就足够避免产生错误的。比如说,原文件可能是只读的,或被设置了某种权限禁止改名。rnPrivate Sub RenameFile(ByVal sOldFileName As String, ByVal sNewFileName As String)rn '示范产生两个错误rn Static iErrCount As Longrn If (iErrCount = 0) Thenrn iErrCount = iErrCount + 1rn Err.Raise 10001, , "新文件名已存在!"rn ElseIf (iErrCount = 1) Thenrn iErrCount = iErrCount + 1rn Err.Raise 10002, , "无给此文件改名的权限!"rn End Ifrn rnrnEnd Sub[/code]rnrn如果还有同学因为错误处理的经验不足,没有看明白后面这部分的原理,可以试着自己反复研读下msdn library中on error,resume等条目。因为时间所限,本人还要想办法给别人提问的帖子回答赚分好应付版主考评,就暂不仔细分析其中的因果了。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试