【问题标题】:Can I throw an error in vbscript?我可以在 vbscript 中抛出错误吗?
【发布时间】:2010-12-21 19:33:25
【问题描述】:

我习惯于使用 C# 进行编程,它显然具有一些非常强大的错误处理能力。现在我正在用 VBScript 做一个简短的项目。我已经阅读了使用“On Error _______”和Err 全局变量的VBscript 错误处理。

但是,有什么方法可以生成我自己的错误吗?例如,如果我的一个函数传递了错误类型的参数,我宁愿我的脚本在那时完全失败,然后尝试继续。

【问题讨论】:

    标签: vbscript error-handling


    【解决方案1】:

    是的,你可以。使用Err.Raise 方法,例如:

    Err.Raise 5 ' Invalid procedure call or argument
    

    有关 VBScript 标准错误代码的列表,请参阅Errors (VBScript)

    【讨论】:

      【解决方案2】:

      虽然@helenanswer 是正确的,但它有点稀疏。

      它详细介绍了Err.Raise() 方法,但遗漏了一些关键点。

      来自original question
      但是,有什么方法可以生成我自己的错误吗?例如,如果我的一个函数传递了错误类型的参数,我宁愿我的脚本在那时完全失败,然后尝试继续。

      Err.Raise() 非常通用,它可以抛出现有异常(如前所述),但它也可以抛出全新的用户定义异常。

      Call Err.Raise(vbObjectError + 10, "My Application", "My custom error message")
      

      vbObjectError (-2147221504) 是一个内置的 VBScript 常量,它定义了引发用户定义错误的边界。

      【讨论】:

      • 用户定义的信息很有帮助。
      • 在测试过程中我发现你应该自定义错误号应该在范围内替换自定义错误号应该在 513–65535 范围内(所以不是 10),它确实有效,但自定义在 ASP 错误对象上找不到错误消息(更多信息:docs.microsoft.com/en-us/office/vba/language/reference/…)。
      • @Sunib 感谢您的参考,但老实说,我在使用 vbObjectError 和任何整数时从未遇到任何问题。但无论如何,感谢您指出范围,可能对某人有用。
      【解决方案3】:

      C# try-catch-finally

      ​​>
      try {
          // some code
      } catch( Exception e ) {
          // error handler
      } finally {
          // clean up things
      }
      

      VBScript 等效项

      on error resume next
      ' some code
      if( Err.number <> 0 ) then
          ' error handler -- you can use Err.raise() here to display your own errors
          Err.clear()
      else
          ' clean up things
      end if
      on error goto 0
      

      对于好的 VBScript 示例,您可以查看ASP Xtreme Evolution project

      【讨论】:

      • 我认为最好的做法是将错误处理逻辑包装在标签中,而不是使用On Error Resume Next
      • 只是为了和 C# 做个对比
      • @ChaosPandion On Error GoTo Label 在 VBScript 中不受支持。
      • @Tmdean - 过了一会儿 VB6 和 VBScript 有点融合在一起了。
      • 这两个代码块不等效,因为即使发生错误,finally 块也会执行。您的 VBScript “等效”应该在 If 语句之外有 'clean up things 部分,以及一个 On Error GoTo 0 以停止错误处理。此外,另一个区别是 VBScript 'some code 部分只能是一行,或者至少只能包含一行可能会产生错误的行,因为下一行,不管它是什么 将在On Error Resume Next 处于活动状态时执行。 If 1 = 1 / 0 Then 将流入 If 块。
      猜你喜欢
      • 2014-02-09
      • 2021-10-19
      • 2017-11-17
      • 2012-03-11
      • 2011-11-07
      • 2018-11-29
      • 1970-01-01
      • 2018-01-12
      • 2011-06-29
      相关资源
      最近更新 更多