顯然,你需要某種錯誤處理。一般來說,VBScript的錯誤處理並不好玩,但是對於你的規格 - 在任何/不關心什麼問題的情況下獲得正確的或默認的 - 你可以使用一個不錯的和簡單的方法:
Reduce your original功能
- 分配默認值與函數名(爲失敗做好準備)
- 上的錯誤繼續下一步(禁用VBScript的默認的錯誤處理,即崩潰)的返回值的
- 分配輔助功能到功能名稱(爲成功做準備)
在代碼:
Function GetShortURL2(strUrl)
GetShortURL2 = strUrl
On Error Resume Next
GetShortURL2 = [_getshorturl](GetShortURL2)
End Function
我用[],以便能夠使用「非法」的功能名稱,是因爲我想強調的是_getshorturl()不應該被直接調用。 _getshorturl()中的任何錯誤都會導致分配跳過,並且在下一行/中出現一個繼續(離開函數,返回默認值,重置爲默認錯誤處理)。
的輔助函數包含您的原始功能的「關鍵部位」:
Function [_getshorturl](strUrl)
Dim oXml : Set oXml = CreateObject("Msxml2.ServerXMLHTTP.3.0")
oXml.Open "GET", "http://tinyurl.com/api-create.php?url=" & strUrl, False
oXml.Send
[_getshorturl] = oXml.responseText
End Function
無論哪個操作失敗,程序流程將恢復/在GetShortURL2的「端功能」行()。
補充:在通常的方式如果您關閉錯誤處理做到這一點(見丹尼爾·庫克的建議)
評論(與「論錯誤繼續下一步」就是這樣),你是如履薄冰:所有的錯誤都是隱藏的,而不僅僅是你想要的;您的腳本將在所有下一行中執行操作,無論是否給予必要的前提條件或完成了準備工作。
所以您應該限制範圍,以一個高風險行:
Dim aErr
...
On Error Resume Next
SomeRiskyAction
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error Goto 0
If aErr(0) Then
deal with error
Else
normal flow
End If
或每行之後檢查在OERN範圍
On Error Resume Next
SomeRiskyAction1
If Err.Number Then
deal with error
Else
SomeRiskyAction2
If Err.Number Then
deal with error
Else
...
End If
End If
這就是我的意思,當我說「不好玩」。將有風險的代碼放在函數中可以避免這種麻煩。
非常感謝,效果很好。爲你+1 – neojakey