Страница: 1 |
Страница: 1 |
Вопрос: Смена режима обработки ошибки
Добавлено: 22.08.08 20:36
Автор вопроса: Wolf4D | Web-сайт:
Наверное, кто-то из здешних обитателей сталкивался с подобными вещами:
Имеется подпрограмма, в самом начале её кода задаётся режим обработки ошибок (не знаю даже, как это назвать по научному, но вот пример):
On Error GoTo FinaliseError
<куча кода>
Exit Sub
FinaliseError:
<куча кода>
End sub
А теперь мне вздумалось пропускать ошибки (а они по логике программы не обязаны, но в 90% случаев должны возникать) в этой самой подпрограмме в коде после метки!
То есть:
On Error GoTo FinaliseError
<куча кода>
Exit Sub
FinaliseError:
On Error Resume Next
<куча кода>
End sub
Но тут уже, встретив ошибку, компилятор ругается на неё по всей форме, не думая пропускать... Конечно, можно сделать вызов после этой метки ещё одной подпрограммы, куда и запихнуть строптивый код. Но нет ли способа попроще?
Ах, да. VB6.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 23.08.08 21:14
on error goto 0
Номер ответа: 2
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #2
Добавлено: 24.08.08 15:05
Спасибо, но нужен всё-таки пропуск ошибок, а не увод программы в неведомо куда (а, судя по всему, goto 0 это и делает - как-то уже не хочется ломать то, что заработало для проверки).
Уже вставил тот код в отдельный Sub. На том и порешил проблему.
Но всё равно спасибо.
Номер ответа: 3
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #3
Добавлено: 24.08.08 16:29
<imho> если ошибка есть, то программист должен хотя бы знать о ней </imho>
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 24.08.08 23:01
On Error GoTo / On Error Resume действует до выхода из процедуры, а не до следующего встретившегося On Error
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 25.08.08 19:04
On Error GoTo 0 это не "увод вникуда", а отключение обработки ошибок - если произойдет ошибка то ее обработает отладчик (если запускаешь под отладчиком) или будет падение программы.
Вот вобщем, а вообще в VB 6.0 "обработка ошибок" присутствует чисто формально и как правило используется так:
Sub Hel ()
On Error Resume Next
' тут код
End Sub
Поэтому и переходим на VB .NET 9.0
Номер ответа: 6
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #6
Добавлено: 25.08.08 19:23
><imho> если ошибка есть, то программист должен хотя бы знать о ней </imho>
У меня просто это очень хитрая процедура работы с директориями. Если ошибка возникает - значит, директории нет! И идём на метку, там всё делаем... но и там могут быть затруднения...
>On Error GoTo 0 это не "увод вникуда", а отключение обработки ошибок - если произойдет ошибка то ее обработает отладчик (если запускаешь под отладчиком) или будет падение программы.
Это отключение обработки ошибок вообще? Спасибо...
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 26.08.08 03:15
ну типо..
код..
...
On Error Resume Next
код...
on error goto vnikuda
код..
.. а потом бац.. и убрали все обработчики установленные ранее.
on error goto 0
далее прога будет падать, если не задать новый обработчик.
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 26.08.08 03:17
Номер ответа: 9
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #9
Добавлено: 26.08.08 14:39
Ага... Всё становится на свои места. Спасибо, теперь всё более-менее понятно.