Ошибка прерывания или «Продолжить дальше» - PullRequest
5 голосов
/ 03 мая 2010

Я понимаю, что это более старая среда программирования, но мне нужно очистить некоторый код VB6, и я обнаружил, что большая часть его использует:

On Error Resume Next

Каково общее мнение об использовании On Error Resume Next?

Конечно, если есть ошибка, вы бы хотели, чтобы приложение прекратило свою работу, откатило любые изменения данных и проинформировало пользователя об ошибке, а не просто возобновило ее.

Когда стоит использовать On Error Resume Next?

Ответы [ 3 ]

7 голосов
/ 05 мая 2010

Вполне разумно использовать On Error Resume Next для реализации локальной структурированной обработки ошибок. Это включает в себя тестирование на исключение и, конечно же, действие на него, а также снятие с охраны этого механизма. Пример:

On Error Resume Next
GetAttr strFilePath
If Err Then
    On Error GoTo 0
    'Deal with "no file" scenario.
Else
    On Error GoTo 0
    'Open and process the file.
End If

Это простой пример, когда ожидается только одно исключение. В некоторых случаях необходимо проверить Err.Number для конкретных значений и предпринять различные действия на их основе.

Неструктурированный подход, основанный на метке GoTo , также может часто работать, но в большинстве случаев он вряд ли превосходит. В VBScript шаблон, показанный выше, является единственной формой обработки исключений, которая у вас есть, поскольку GoTos или ярлыки отсутствуют.

Нечестивым является постановка явного исключения из проверки во главе каждой процедуры и игнорирование его ... своего рода Доверьтесь Force, Люк подход к попытке маскировать ошибки кодирования.

5 голосов
/ 04 мая 2010

Я нашел это полезным в функциях, где ошибка не гарантирует пользователя, прерываемого проблемой. Хороший пример в событии изменения размера. Если вы допустили ошибку или возникла проблема в событии изменения размера, то, вероятно, вы не хотите, чтобы пользователь видел это, поскольку это, вероятно, не повлияет на функциональность.

Я бы сказал, в общем, используйте это экономно.

2 голосов
/ 03 мая 2010

Почти никогда - если не используется сознательно, например, в строке, где успешный вызов установит конкретное возвращаемое значение, а последующий код обрабатывает возвращаемое значение, чтобы обслужить случай ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...