エラー処理のための ASP Classic にはどのようなオプションがありますか?
例えば:
Mail.SendMail
関数を使用していますが、テストサーバーの電源を入れると機能しません。これは正常です。郵送が可能かどうかをテストし、そうでない場合は続行またはメッセージを表示します。
何か案は?
2つのアプローチがあり、JScriptまたはVBScriptでコードを作成することができますが、これらはコンストラクトを持っているか、コードでそれをごまかします。
JScriptを使用すると、次のタイプの構成を使用できます。
<script language="jscript" runat="server">
try {
tryStatements
}
catch(exception) {
catchStatements
}
finally {
finallyStatements
}
</script>
あなたのASPコードでは、次のようなエラーの再開時にエラー履歴をチェックして、エラーの数をチェックします。
<%
' 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.
%>
Wolfwyrdの回答について:「On Error Resume Next」は、実際にはエラー処理をオフにします!オンではありません。 On Error Goto 0はエラー処理をONに戻します。これは、少なくとも、自分で記述しなかった場合にマシンがそれをキャッチできるようにするためです。オフ=処理はユーザーに任せます。
On Error Resume Nextを使用する場合、その後に含めるコードの量に注意する必要があります。フレーズ「If Err.Number <> 0 Then」は、トリガーされた直前のエラーのみを指すことに注意してください。
「On Error Resume Next」の後のコードブロックに、合理的に失敗すると予想される場所がいくつかある場合、チェックするために、可能性のあるすべての失敗行の後に「If Err.number <> 0」を配置する必要があります実行。
それ以外の場合、「次のエラー時に再開」とは、それが言っていることを意味します-コードは好きなだけ多くの行で失敗する可能性があり、実行は順調に続行されます。それがお尻の痛みだからです。
1)On Error Resume Next
をページの上部に追加します
2)ページの下部に次のコードを追加します
If Err.Number <> 0 Then
Response.Write (Err.Description)
Response.End
End If
On Error GoTo 0
欠落している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
ステートメント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
ASPだけでなく、より現代の言語で働いた人にとっては、この質問は笑いを誘います。私の経験では、カスタムエラーハンドラ(IISで設定して500; 100エラーを処理する)を使用することが、ASPエラー処理に最適なオプションです。この記事では、アプローチについて説明し、サンプルコード/データベーステーブルの定義を示します。
一部のシナリオでは、開発者がスクリプト言語を常に切り替えられるとは限りません。
私の好みは間違いなくJavaScriptです(そして新しいプロジェクトで使用しました)。ただし、古いプロジェクトの維持は依然として必要であり、必要です。残念ながら、これらはVBScriptで記述されています。
したがって、このソリューションは真の「試行/キャッチ」機能を提供しませんが、結果は同じであり、仕事を成し遂げるには十分です。