|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
||||||||||||||||
Когда имеет смысл ставить "on Error Resume Next"18.03.2009, 15:13. Показов 64174. Ответов 35
Метки нет (Все метки)
Доброго дня разработчикам!
Как известно, у нормального лотусного программиста функция выглядит так:
Но при этом внутри ф-ии иногда используется конструкция вида
Что бы не быть голословным приведу примеры, что зачастую ставлю внутрь "On Error Resume Next": 1. Set doc = db.GetDocumentByID/UNID(ID) (ну это у меня вынесено в отдельную ф-ию) 2. Call Dc.AddDocument(doc) 3. MkDir 4. Kill 5. RmDir 6. Dir Иногда использую такую конструкцию (может кому пригодиться):
Спасибо!
0
|
||||||||||||||||
| 18.03.2009, 15:13 | |
|
Ответы с готовыми решениями:
35
Имеет ли смысл ставить Win8 Имеет ли смысл ставить больше памяти? Антивирус бесплатный имеет ли смысл ставить? |
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
|
| 18.03.2009, 16:24 | |
|
не ну взял и все наиболее употр*цензура*емые варианты перечислил...
например, NotesDatabase.Open()... в общем, в любом случае, когда нужно получить результат некоторой операции и пойти дальше, а не париться с обработкой...
0
|
|
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
||||||
| 18.03.2009, 16:52 | ||||||
|
Кстати db.Open я раньше тоже иногда ставил в такой обработчик.
Сейчас юзаю конструкцию, которая пока что работает железно:
Тут услышал из уст коллеги, что On Error Resume Next не надо использовать никогда. Вот и решил узнать, один ли я столь убог, что юзаю On Error Resume Next
0
|
||||||
|
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|||||||||||
| 18.03.2009, 17:00 | |||||||||||
|
Я редко использую, т.к. в случае ошибки часто нельзя выполнять следующую строку.
Например:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
||
| 18.03.2009, 17:41 | ||
а чем он это аргументировал? или он какой-то явист или ему подобный, лихо использующий try {} catch {}?
0
|
||
|
0 / 0 / 0
Регистрация: 13.10.2005
Сообщений: 848
|
|
| 18.03.2009, 23:24 | |
|
мои 5 копеек.
вообще у нас принято в обязательном порядке использовать обработчик ошибок вида function f_name (params) as boolean On Error Goto ErrorHandler f_name = false код f_name = true Ex: Exit Function ErrorHandler: обработка ошибки Resume Ex End Function что касается Resume Next, то часто использую в связке с db.GetDocumentByUNID on error 4091 resume next Set doc = db.GetDocumentByUNID (unid) if (doc is Nothyng) then ну и так далее. использовать же On Error Goto ErrorHandler On Error Resume Next код для проверки On Error Goto ErrorHandler на мой взгляд не совсем красиво, ибо может запутывать логику. я бы постарался код для проверки выделить в функцию. но в конструкции не вижу ничего криминального.
0
|
|
|
0 / 0 / 0
Регистрация: 30.11.2007
Сообщений: 43
|
|
| 19.03.2009, 07:34 | |
|
Как мне кажется все ошибки должны обрабатываться в одном месте:
sub Test on error goto ErrEx: exit sub ErrEx: Select Case Err Case 1001:print "User Error 1001" Case 1002:print "User Error 1002" Case 1003:print "User Error 1003" Case 1004:Print "User Error 1004" Case 4091: resume Next Case Else print cstr(Er) End Select exit sub end sub
0
|
|
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
||
| 19.03.2009, 10:47 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
|
|
| 20.03.2009, 12:12 | |
|
как и везде кетч эксепшн и продолжение выполнения, происходит в местах, где использование кода (часто не тобой написанного) может вызвать исключение, но оно ситуативно некритично и решение нужно вынести в др. месте программы (а здесь - отметить ситуацию)
как пример - файловые операции типа удаления и создание каталога, файлов файл удален уже или не был создан, каталог уже существует (а доп. проверка - тот же код) или вариант когда не хотелось бы в обработке исключения добавлять код, кот. тоже может вызвать исключение
0
|
|
|
0 / 0 / 0
Регистрация: 20.10.2008
Сообщений: 271
|
|
| 03.05.2009, 15:41 | |
|
Вот еще всплыл случай необходимости использования.
Во время работы ночного агента пришлось поставить обработчик, т.к. проблема с 32к при сохранении. On Error Resume Next Err = 0 mdoc.Save True, False If Err Then Print {...} End If On Error Goto errorproc
0
|
|
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
||||||
| 04.05.2009, 12:01 | ||||||
|
ага, я на сохранение дока тож вешаю, но иначе
правда, если док не новый, и фактически не был изменен, то Save вернет False, поэтому дополнительная проверка на код ошибки не мешает...
0
|
||||||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
||||||
| 02.02.2010, 13:16 | ||||||
|
На собственном опыте убедился, что если можно (а оно можно, если постараться), то лучше обойтись без On Error Resume Next.
Был в шоке, когда в вызываемой процедуре для GetDocumentByUNID указал On Error Resume Next, но обработчик ошибок вызывающей процедуры выдал мне Err = 4091! Это было... точно не помню, вроде в фоновых агентах. Стали ставить принудительно Err = 0, но в некоторых особо хитрых случаях (не помню - здесь вы мне можете или верить или не верить) не работало и это! Пришли к тому, что лучше использовать культурный метод для обнуления ошибки On Error Goto 0. Применительно к GetDocumentByUNID это выглядит так:
Если не запариваться на повторность кода, то можно писать что хочешь и как хочешь, - копипастить и в каждом случае производить отладку заново...
0
|
||||||
|
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
|
||
| 02.02.2010, 13:33 | ||
Обьясню, уже достаточно давно всё дроблю на мелкие функции, которые обязательно возвращают True если доходят до конца а основное ядро просто глядит на возврат функции тем самым лавируя по логике в мелких же функция никогда не юзается Resume Next там или выход или обход конкретной ошибке
0
|
||
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
||||
| 02.02.2010, 15:32 | ||||
тоже сбрасываю ошибку с пом Err = 0.
вообще, на очень интересный момент ты указал. спасибо
0
|
||||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
|||||
| 02.02.2010, 15:57 | |||||
<span class="vbquote">("Help")</span><!--QuoteEBegin-->GoTo 0 If errNumber is specified, specifies that when the error occurs, the error should be handled by the most recent general On Error statement that specifies no error number. If errNumber is omitted, no errors are handled in the current procedure.[/quote]Или здесь: http://web3.inttrust.ru/site/itforum.nsf/4...33;OpenDocument И чуток ниже там есть "How does On Error work?". Но эту штуку я первый раз увидел не в хелпе, а на форуме Интертраста несколько лет назад: http://web3.inttrust.ru/site/itforum.nsf/4...33;OpenDocument
Что советуют, например, здесь: http://web3.inttrust.ru/site/itforum.nsf/4...33;OpenDocument не работает. Нужно сначала уйти на метку (у меня это Err4091 (отредактировал)), а с неё уже Resume Next, а потом чтобы перед выходом из функции обязательно On Error Goto 0, - тогда всё тип-топ!
0
|
|||||
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
||
| 02.02.2010, 15:58 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
|||||||
| 02.02.2010, 16:02 | |||||||
|
VladSh
проверил, можешь и сам проверить
Добавлено:
0
|
|||||||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
||
| 02.02.2010, 16:03 | ||
|
Akupaka, не, так не будет работать я чуть выше на этом специально остановился.
0
|
||
|
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
|
|||
| 02.02.2010, 16:09 | |||
|
ага, вероятно, что я таки не так понял
Добавлено:
0
|
|||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
||||||
| 02.02.2010, 16:14 | ||||||
|
Akupaka, дык вот жи он: .
Добавлено: После
0
|
||||||
| 02.02.2010, 16:14 | |
|
Помогаю со студенческими работами здесь
20
Имеет ли смысл ставить видеокарту на эту сборку? Имеет ли смысл ставить доп. охлаждение на видеокарту Имеет ли смысл ставить ссылки в 1ps через редирект Имеет ли смысл ставить gtx 770 на мой компьютер? Имеет ли смысл ставить 1050Ti 4Gb или 1060 3(6)Gb к старенькому i7? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|