在ASP Classic中是否可以像try-catch一样进行错误处理?

时间:2009-01-23 11:08:15

标签: error-handling asp-classic

ASP Classic中有哪些选项可用于错误处理?

例如:

我正在使用Mail.SendMail功能但是当打开测试服务器时它不起作用,这是正常的。我想测试邮件是否可能,如果没有,则继续和/或显示消息。

有什么想法吗?

8 个答案:

答案 0 :(得分:48)

有两种方法,您可以在JScript或VBScript中编写具有该构造的代码,也可以在代码中捏造它。

使用JScript,您将使用以下类型的构造:

<script language="jscript" runat="server">
try  {
    tryStatements
}
catch(exception) {
    catchStatements
}
finally {
    finallyStatements
}
</script>

在你的ASP代码中,你可以通过在你尝试的时候使用错误恢复来捏造它,然后在捕获点检查err.Number:

<%
' Turn off error Handling
On Error Resume Next


'Code here that you want to catch errors from

' Error Handler
If Err.Number <> 0 Then
   ' Error Occurred - Trap it
   On Error Goto 0 ' Turn error handling back on for errors in your handling block
   ' Code to cope with the error here
End If
On Error Goto 0 ' Reset error handling.

%>

答案 1 :(得分:9)

关于Wolfwyrd的anwer:“On Error Resume Next”实际上关闭了错误处理!不开。 On Error Goto 0将错误处理重新打开,因为至少我们希望机器能够捕获它,如果我们没有自己编写它。关=让它来处理它。

如果你使用On Error Resume Next,你需要注意你之后包含多少代码:记住,短语“If Err.Number&lt;&gt; 0 Then”仅指最先触发的错误。

如果“On Error Resume Next”之后的代码块有几个地方你可能会合理地预期它会失败,那么你必须在每个可能的地方之后放置“If Err.number&lt;&gt; 0”失败线,检查执行情况。

否则,在“on next resume next”之后意味着它所说的内容 - 你的代码可以在尽可能多的行中失败,并且执行将继续快速执行。这就是为什么这是一个痛苦的屁股。

答案 2 :(得分:8)

1)在页面顶部添加On Error Resume Next

2)在页面底部添加以下代码

If Err.Number <> 0 Then

  Response.Write (Err.Description)   

  Response.End 

End If

On Error GoTo 0

答案 3 :(得分:7)

为缺少的COM类处理此问题的一种相当不错的方法:

Dim o:Set o = Nothing
On Error Resume Next
Set o = CreateObject("foo.bar")
On Error Goto 0
If o Is Nothing Then
  Response.Write "Oups, foo.bar isn't installed on this server!"
Else
  Response.Write "Foo bar found, yay."
End If

答案 4 :(得分:4)

对于曾经使用过ASP以及更多现代语言的任何人来说,这个问题会引起一阵轻笑。根据我的经验,使用自定义错误处理程序(在IIS中设置以处理500; 100错误)是ASP错误处理的最佳选择。本文介绍了该方法,甚至为您提供了一些示例代码/数据库表定义。

http://www.15seconds.com/issue/020821.htm

答案 5 :(得分:4)

语句 On Error Resume Next 应置于我们想要验证的范围之上。

  On Error Resume Next
  'Your code logic is here

然后以如下声明结束:

  If Err.Number <> 0 then

  'Your error message goes here'

  End if

答案 6 :(得分:2)

因为我在ASP领域已经有一段时间了,但是iirc有几种方式:

可以在VBS中合理地模拟

try catch finally(好文章 here here)并且有一个名为class_terminate的事件你可以观察和捕捉全局异常。然后就有可能改变你的脚本语言......

答案 7 :(得分:1)

有些场景并不总是允许开发人员切换脚本语言。

我的选择绝对是JavaScript(我在新项目中使用过它)。但是,仍然需要维护旧项目。不幸的是,这些是用VBScript编写的。

所以即使这个解决方案没有提供真正的“尝试/捕获”功能,结果也是一样的,这对我来说已经足够好了。