ASP Classic中有哪些选项可用于错误处理?
例如:
我正在使用Mail.SendMail
功能但是当打开测试服务器时它不起作用,这是正常的。我想测试邮件是否可能,如果没有,则继续和/或显示消息。
有什么想法吗?
答案 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错误处理的最佳选择。本文介绍了该方法,甚至为您提供了一些示例代码/数据库表定义。
答案 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编写的。
所以即使这个解决方案没有提供真正的“尝试/捕获”功能,结果也是一样的,这对我来说已经足够好了。