Возможна ли обработка ошибок 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. В этой статье описывается подход и даже дается пример определения кода / таблицы базы данных.

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


заявление При Ошибке Возобновить Далее должно быть помещено поверх того, что мы хотим проверить.

  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", результат тот же, и этого достаточно для меня, чтобы выполнить работу.