Возможна ли обработка ошибок try-catch в ASP Classic?
какие опции есть в ASP Classic для обработки ошибок?
например:
Я использую Mail.SendMail
функция, но при включении тестового сервера она не работает, что нормально. Я хочу проверить, возможна ли рассылка, если нет, то продолжить и / или показать сообщение.
какие идеи?
8 ответов
существует два подхода, вы можете кодировать в JScript или VBScript, которые имеют конструкцию, или вы можете подделать ее в своем коде.
используя JScript, вы бы использовали следующий тип конструкции:
<script language="jscript" runat="server">
try {
tryStatements}
catch(exception){
catchStatements}
finally {
finallyStatements}
</script>
в вашем ASP-коде вы подделываете его, используя on error resume next в тот момент, когда у вас будет попытка и проверка err.Число в точке улова, как:
<%
Dim i
' Turn on 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 ' But don't let other errors hide!
' Code to cope with the error here
End If
On Error Goto 0 ' Reset error handling.
%>
относительно Wolfwyrd's anwer:" on Error Resume Next " на самом деле отключает обработку ошибок! Не на. При ошибке Goto 0 снова включает обработку ошибок, потому что, по крайней мере, мы хотим, чтобы машина поймала его, если мы не записали его в себя. Off = оставляя это вам, чтобы справиться с этим.
Если вы используете on error Resume Next, вам нужно быть осторожным о том, сколько кода вы включаете после него: Помните фразу " If Err.Число 0 тогда " относится только к самой предыдущей ошибке.
Если ваш блок кода после "on Error Resume Next" имеет несколько мест, где вы можете разумно ожидать его сбоя, то вы должны поместить "If Err.номер 0 " после каждой из этих возможных строк сбоя, чтобы проверить выполнение.
в противном случае после "on error resume next" означает именно то, что он говорит - ваш код может потерпеть неудачу на столько строк, сколько ему нравится, и выполнение будет продолжаться весело. Вот почему это заноза в заднице.
довольно хороший способ справиться с этим для отсутствующих классов 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
1) Добавить On Error Resume Next
вверху страницы
2) Добавьте следующий код в нижней части страницы
If Err.Number <> 0 Then
Response.Write (Err.Description)
Response.End
End If
On Error GoTo 0
для любого, кто работал в ASP, а также более современных языках, вопрос вызовет смешок. По моему опыту, использование пользовательского обработчика ошибок (настроенного в IIS для обработки 500;100 ошибок) является лучшим вариантом для обработки ошибок ASP. В этой статье описывается подход и даже дается пример определения кода / таблицы базы данных.
заявление При Ошибке Возобновить Далее должно быть помещено поверх того, что мы хотим проверить.
On Error Resume Next
'Your code logic is here
затем закончите с утверждением типа:
If Err.Number <> 0 then
'Your error message goes here'
End if
прошло некоторое время с тех пор, как я был в ASP land, но iirc есть несколько способов:
try catch finally
можно разумно моделировать в VBS (хорошая статья здесь здесь) и есть событие под названием class_terminate
вы можете наблюдать и ловить исключения глобально. Тогда есть возможность изменить язык сценариев...
некоторые сценарии не всегда позволяют разработчикам переключать язык сценариев.
Я определенно предпочитаю JavaScript (и я использовал его в новых проектах). Однако сохранение старых проектов по-прежнему необходимо и необходимо. К сожалению, они написаны на VBScript.
поэтому, хотя это решение не предлагает истинной функции" try/catch", результат тот же, и этого достаточно для меня, чтобы выполнить работу.