举几个例子:
(1)假设有如下的伪代码:
while getDatabaseConnect() = true
LoadData()
wend
如果数据库不可用,会丢出异常,那么使用On Error Resume Next会使得代码陷入死循环,程序瘫痪。
(2)有时候出现异常并非出错,而是正常情况,比如当comdialog设置cancelerr = true的时候,用户点击cancel,会产生一个错误,如果忽略掉,那么造成BUG——明明用户取消了,可是还在按照确定以后的代码走。
(3)有些异常难以避免,但是根本无须提示用户。给出警告会让用户觉得烦恼、或者觉得软件不可靠、或者浪费客服资源。
(4)对于编写系统函数库的开发者,对于并非本函数能够处理的异常,抛出去而不是吃掉才是正确的做法——不然调用者不知道函数返回的是否正确,如果没有机制去证实函数是否运行完成,只能使得程序变得不可靠,举例:
一个系统函数从串口读取设备温度,假设温度在-10~60为正常,否则要报警,代码如下:
Function GetTemp() As Long
On Error Resume Next
GetTemp = ReadComPortData()
end function
假设ReadComPortData()出现异常,那么这个代码返回0,但是这个0不同于代码正常的时候返回的0所表示的0摄氏度,而是一个无意义的初始值。我们的主程序如果不知道这个情况,可能程序是不会打断了,但是一场事故就要酿成了!!!
(5)异常本身也是调试程序、简化程序代码有时候利用的技巧,这个比较复杂,就不想细说了。