VB6处理错误处理程序中引发的错误

3
我有这样的代码,所以当第一次引发错误(c=1/0)时,它会进入错误处理程序,之后再进入if语句,如果再次引发错误,则应用程序会崩溃,而不是进入错误处理程序。你有什么想法如何解决这个问题?
在错误处理程序中添加Resume Next语句,可以使程序继续执行而不是崩溃。
On Error Resume Next
maxretry=3
c=1/0
Again:
    c=a/b
ErrorHandler:
    if maxretry>0 then
        maxretry=maxretry-1
        goto Again
    end if

我认为你需要在Again:处再加一个On Error - Ňɏssa Pøngjǣrdenlarp
在上面的代码中,无论 c = 1/0 是否引发异常,c 最终都会等于 a/b。 - CMaster
1个回答

6

在错误处理程序中,您最好使用RESUME而不是GOTO

On Error GoTo ErrorHandler
   maxretry=3
   c=1/0
Again:
     c=a/b
ErrorHandler:
      if maxretry>0 then
          maxretry=maxretry-1
          Resume Again

       end if

使用RESUME将会重置内部错误处理程序标志,并使您可以重新进入它(有点像)。

Resume Again告诉VB6在标记为Again:的行处恢复代码执行(在处理错误后)。

您还可以使用Resume Next,它告诉VB6在导致错误的指令之后继续执行下一条指令。

如果您想重试操作,则需要放置另一个标签并更新您的代码,应该看起来像这样:

On Error GoTo ErrorHandler

    ' Max number of tries.
    maxretry = 3

Retry:
    c = 1 / 0

NoMoreTry:
    c = a / b

Exit Sub
' or Exit Function
' to avoid entering error handler because we don't need to

ErrorHandler:
    If (maxretry > 0) Then
        maxretry = maxretry - 1
        ' Try again, resume execution to "Retry" label.
        Resume Retry
    End If
    ' Tried 3 times, resume execution to "NoMoreTry" label.
    Resume NoMoreTry

请注意,在这种情况下,如果你的变量b等于0,你很可能会进入一个无限循环,因为当c = a / b失败时,它会跳转到错误处理程序,然后恢复执行到NoMoreTry,再次失败,如此往复...。为了避免这种情况,你可以在NoMoreTry之后使用On Error Resume Next或在错误处理程序中添加更多代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接