旧版ASP中的“on error goto 0”和“error resume next”是什么意思?

7

我正在处理旧的ASP代码,对于on error goto 0error resume next这两种语法结构的语义不是很确定。

你能否为我推荐一些有用的资源或直接给我指点迷津?

4个回答

6

在错误恢复下一步:如果程序中出现异常,只需忽略它并继续执行下一条语句。我认为这被认为非常糟糕和丑陋,这也是正确的。这就像有一个大的:

try
{
  // your code
}
catch
{
  // nothing! muhaha
}

在你的代码中的每个方法(或更糟糕的是,在整个程序周围)。

On error goto 0:禁用当前过程中定义的任何错误处理程序。这就像在你的代码周围有一个大的try-catch一样,一旦它被命中这行就会被禁用。

有关更多信息,请参见MSDN


2
+1 是的。我刚刚发现了这个问题:如果你使用 On Error Goto 0,那么过程中的每个其他 On Error 语句都会被禁用。这完全出乎意料。我原以为文档上说的只是最后执行的错误处理程序被禁用。我期望如果代码到达另一个错误处理程序,它会再次启用,但实际上并不是这样。 - authentictech

4

on error resume next的意思是忽略错误并继续执行下一步操作。 on error goto 0的意思是结束on error resume next。 您也可以这样做。

     <%
        on error resume next '<-- This code will resume and continue executing the code if there is an error



'YOUR CODE HERE

if err.number > 0 then  '<-- This code will look if there are any errors (even if resumed)
' or use If Err.Number <> 0 Then


        'DO SOMETHING IF ERROR
    %>
        Error Number <%= Err.Number %><BR>
        Error Description <%= Err.Description %><BR>        
        Source <%= Err.Source %><BR>

        LineNumber <%= Err.Line %><BR>

        <%end if%>

1
这将会抛出一个语法错误,因此不能用来演示运行时错误处理。 - Ekkehard.Horner

3

on error go to语句将执行代码转到在页面中定义的特定代码书签。当遇到错误时,这非常有用,可以在出现错误时执行其他操作。

On error resume next语句在错误的代码后继续执行下一条代码。它会忽略错误并继续执行代码。这在处理数百个记录且不希望代码停止执行的情况下特别有用。


1
我曾经使用“单次运行”Do循环来构建经典ASP错误处理程序,该程序覆盖了多行代码和多个错误情况。该技术依赖于(补偿?)使用“On Error Resume Next”通过在发生错误时立即退出循环,然后在后续的错误处理代码中测试和响应错误类别来解决问题。请注意,由于中断发生在同一函数中的循环中,因此仍然具有设置循环执行时设置的上下文(变量),因此您的错误处理程序应同时使用该上下文记录智能错误并根据需要清除任何残留引用。
请查看答案“Larry”提供的类似问题的快速示例。 如何处理VB脚本中的错误

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