vbScript on error resume next容錯使用心得
來源:易賢網 閱讀:1548 次 日期:2016-07-20 13:56:23
溫馨提示:易賢網小編為您整理了“vbScript on error resume next容錯使用心得”,方便廣大網友查閱!

vbscript中,錯誤處理使用on error resume next來完成,如果在你的代碼里加入這一句,在這句之后的其他代碼如果出現錯誤,系統(tǒng)將忽略這些錯誤繼續(xù)運行后面的代碼,同時,我們可以使用下面的代碼來捕獲錯誤

代碼如下:

If err.number<>0 then

errNum = Err.Number

errDesc = Err.Description

Call G00B02logOut("Error.002", errNum ,errDesc )

End If

If err.number<>0 then

errNum = Err.Number

errDesc = Err.Description

Call G00B02logOut("Error.002", errNum ,errDesc )

End If

這樣可以捕獲到錯誤代碼和錯誤的描述信息,并寫入日志文件。然 而,有個問題是,在我們捕獲了這個錯誤之后的代碼,如果再出現錯誤而你沒有捕獲的話,代碼仍然會忽略錯誤繼續(xù)運行。忽略錯誤是我們不希望看到的結果,將導致程序調試困難。此時可以使用 On Error GoTo 0 這句來終止前面錯誤處理,即可以和on error resume next 成對出現。這樣就不會影響后面的代碼了。

代碼如下:

on error resume Next

。。。

'DB operate。。

。。。

If err.number<>0 then

errNum = Err.Number

errDesc = Err.Description

Call G00B02logOut("Error.002", errNum ,errDesc )

End If

On Error Goto 0

on error resume Next

。。。

'DB operate。。

。。。

If err.number<>0 then

errNum = Err.Number

errDesc = Err.Description

Call G00B02logOut("Error.002", errNum ,errDesc )

End If

On Error Goto 0

有幾個特點需要了解,

1,on error resume Next如果在全局定義,則作用是全局的,你在主程序中使用了這一句,后面如果調用了一個函數,那么函數中如果有錯誤,也將被忽略,你在主程序中函數調用的語句后面也可以捕獲到這個錯誤,這一點可以通過下面簡單的代碼驗證:

代碼如下:

On error resume Next

funcb ‘調用函數

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

WScript.Echo "main ...."

'On Error Goto 0

Sub funcb

aaaaaaaaaaa '測試用的無效語句

WScript.Echo "funcb ok"

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

End

On error resume Next

funcb ‘調用函數

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

WScript.Echo "main ...."

'On Error Goto 0

Sub funcb

aaaaaaaaaaa '測試用的無效語句

WScript.Echo "funcb ok"

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

End

執(zhí)行以上代碼的結果:

13 - 型が一致しません。

main ....

可以看出,在函數中,aaaaaaaaaaa是故意制造的一個錯誤,其后的WScript.Echo "funcb ok"以及后面的代碼都沒有執(zhí)行。但是,主程序中的WScript.Echo "main ...."語句是執(zhí)行了的。就是說,在函數中如果某個語句出錯,函數中后面的語句都不執(zhí)行,直接執(zhí)行調用函數的語句后面的語句。

2,On error resume Next如果在函數內定義,看下面的代碼執(zhí)行情況

代碼如下:

funcb ‘函數調用

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

WScript.Echo "main ...."

Sub funcb ‘函數定義

On error resume Next

aaaaaaaaaaaa '無效語句

WScript.Echo "funcb ok"

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

End Sub

funcb ‘函數調用

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

WScript.Echo "main ...."

Sub funcb ‘函數定義

On error resume Next

aaaaaaaaaaaa '無效語句

WScript.Echo "funcb ok"

If err.Number <> 0 Then

errNum = Err.Number

errDesc = Err.Description

WScript.Echo errNum & " - " & errDesc

End If

End Sub

執(zhí)行結果如下:

funcb ok

13 - 型が一致しません。

13 - 型が一致しません。

main ....

可以看到,函數體內的err對象和調用它的主程序中都可以捕獲到這個錯誤,這說明err對象是全局的,應該這么理解,err的作用范圍在一個On error resume Next語句和一個On Error Goto 0之間有效。如果我們在funcb調用語句的后面在加一個無效語句,執(zhí)行時會彈出錯誤msg框,說明函數體內的On error resume Next不能作用到函數體外。

以上是使用On error resume Next的一些體會,如果了解了上面兩點,就可以較好的使用錯誤處理的功能了。

更多信息請查看腳本欄目

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網