在VBScript网站中处理未处理的错误?

在VBScript网站中处理未处理的错误?,vbscript,error-handling,Vbscript,Error Handling,我继承了一大堆用几种语言编写的代码。用C#编写的混乱部分似乎被设置为在日志文件中记录大多数未捕获的异常。VBScript中还有一部分程序不会记录错误 是否有一些简单的方法使VBScript代码捕获所有未捕获的错误并将它们记录到某个地方?我认为答案可能是“否”,因为VBScript没有try-catch,而是“On-Error-Resume-Next” 编辑:我很清楚VBScript中的错误处理与VB.net完全不同。我只是想知道是否有一些技巧/技巧可以让我处理未经处理的错误。您可以用几种方法来处

我继承了一大堆用几种语言编写的代码。用C#编写的混乱部分似乎被设置为在日志文件中记录大多数未捕获的异常。VBScript中还有一部分程序不会记录错误

是否有一些简单的方法使VBScript代码捕获所有未捕获的错误并将它们记录到某个地方?我认为答案可能是“否”,因为VBScript没有try-catch,而是“On-Error-Resume-Next”


编辑:我很清楚VBScript中的错误处理与VB.net完全不同。我只是想知道是否有一些技巧/技巧可以让我处理未经处理的错误。

您可以用几种方法来处理,但作为一个简单的示例,以下是处理基本错误处理的方法:

On Error Resume Next

'Insert code to do what you need

If Err.Number <> 0 Then
  WScript.Echo "Error in executing script: " & Err.Number & " - " & Err.Description
  Err.Clear
End If

'Stop doing error handling    
On Error Goto 0
出错时继续下一步
'插入代码以执行所需操作
如果错误号为0,则
WScript.Echo“执行脚本时出错:&Err.Number&“-”&Err.Description
呃,明白了
如果结束
'停止执行错误处理
错误转到0

不幸的是,除了DMasons answer之外,与许多语言(javascript、C#)不同的是,vbscript没有提供大量的错误处理细节,这些语言具有非常方便的“Try{}和Catch{}”参数。是的,On error resume next命令非常简单,但是我发现还有其他一些处理错误的方法很有用

例如,您可以使用以下代码更轻松地创建疑难解答代码:

故障诊断与排除vbs.vbs

Const Troubleshoot_this_code = "C:\testenv\testfail.vbs"
Const Place_Results_In = "C:\testenv\troubleshoot.log"

Dim filesystemobject: Set filesystemobject = CreateObject("Scripting.FileSystemObject")
Dim filetotroubleshoot: Set filetotroubleshoot = filesystemobject.OpenTextFile(Troubleshoot_this_code, 1, True)
Dim Troubleshoot_Lines : Troubleshoot_Lines = split(filetotroubleshoot.ReadAll, vbcrlf)
Dim tbl : Set tbl = filesystemobject.OpenTextFile(Place_Results_In, 8, True)

Dim InsertErrorHandling(),IEH,line : Redim InsertErrorHandling(1) : IEH = 1

InsertErrorHandling(0) = "On Error Resume Next"
For each line in Troubleshoot_Lines
    dim errclause : errclause = "if err.number<>0 then : return=" & chr(34) & "Error Found on Line[" & chr(34) & " & IEH & " & chr(34) & "]:" & chr(34) & " & err.number & " & chr(34) & ":" & chr(34) & " & err.description & vbcrlf : err.clear : else : return = IEH & " & chr(34) & ": Clear" & chr(34) & " & vbcrlf : end if : tbl.Writeline return : IEH = IEH + 1"
    InsertErrorHandling(ubound(inserterrorhandling)) = line & vbcrlf & errclause
    Redim Preserve InsertErrorHandling(Ubound(InsertErrorHandling)+1)
Next

dim FullTestCode : FullTestCode = Join(InsertErrorHandling, vbcrlf)
ExecuteGlobal FullTestCode
tbl.close
dim query : query = CreateObject("Scripting.FileSystemObect")
dim result : result = query.CreateTextFile("test.txt")
dim fail : fail = result.readall
示例:疑难解答.log

Error Found on Line[1]:429:ActiveX component can't create object

Error Found on Line[2]:424:Object required

Error Found on Line[3]:424:Object required

VBScript不支持通过在标签上继续执行来处理错误的概念。换句话说,您不能在VBScript中使用错误转到时的
。相反,请在错误恢复下一步使用
,然后检查
Error.Number
Errors
集合的
Count
属性


使用
Option Explicit
可能有助于发现VBScript错误。它强制显式声明所有变量,并防止意外重用以前声明的变量的名称。此外,如果您错误键入已声明变量的名称或试图使用未声明的变量,则会生成错误消息。

VBScript不支持通过在标签上继续执行来处理错误的概念。换句话说,您不能在VBScript中使用错误转到时的
。相反,请在错误恢复下一步使用
,然后检查错误集合的
Err.Number
Count
属性。这不是你想要的答案(“不”是一个完全可以接受的答案,当你说为什么:-)你为什么不继续,并提交作为一个答案。