-
> TURSCmdMngr.OnAccUsrChangePwd2 кризис в действии? стараетесь лишний раз не стирать клавиши на клавиатуре? :)
-
> Anatoly Podgoretsky (16.01.2009 19:48:14) [14]
Извиняюсь, рабочий, не заметил кое что, но даже в этом коде можно result := CONST_EXCEPTION; перенести выше и except будет уже не пустой, так что данный код не может быть аргументом.
-
-
> Anatoly Podgoretsky © (16.01.09 20:18) [21] > > Anatoly Podgoretsky (16.01.2009 19:48:14) [14] > > Извиняюсь, рабочий, не заметил кое что, но даже в этом коде > можно result := CONST_EXCEPTION; перенести выше и except > будет уже не пустой, так что данный код не может быть аргументом. >
Почему? + Есть например [7] с учетом [12].
-
Еще например пример из моего кода. try try ....
if TRUE then showmessage('CONST_OK') else showmessage('NOT'); except result:=const_EXCEPTION; //Делаем вещи по обработке исключения, но они могут привести к другому исключению. //или просто raise; end; except end;
Внешний пустой try\except глотает все неизвестное.
-
> oxffff (16.01.2009 20:30:23) [23]
Я про конкретный, а не про все варианты. В конкретном нет разницы между
except end; result := CONST_EXCEPTION;
и
except result := CONST_EXCEPTION; end;
И мне второй вариант приятнее, не говоря уже об верхних строках.
-
> Anatoly Podgoretsky © (16.01.09 20:46) [25]
Тогда [24], либо [7]+[12].
-
> oxffff (16.01.2009 20:45:24) [24]
Вот это другое, похоже кусок сервера или служды, но я бы не стал делать пустым, а включил бы управляемое логирование.
-
блин, народ понес свои примеры... Но все таки, господа, я бы хотел рассмотреть свой пример :)) Если код: try
Window:=Document.parentWindow;
Window.before_print_script;
except ;
end; Неправильный в силу нарушения... эээ... так сказать "паттерна проектирования" что нельзя тело except оставлять пустым, то что же тогда должно быть здесь в теле except?
-
> Anatoly Podgoretsky © (16.01.09 20:54) [27] > > oxffff (16.01.2009 20:45:24) [24] > > Вот это другое, похоже кусок сервера или служды, но я бы > не стал делать пустым, а включил бы управляемое логирование. >
Я естестенно пишу, как [7],[8],[10],[24] в зависимости от ситуации. Я придерживаюсь простой для меня истины, есть разные способы решения. Но не один.
-
> Неправильный в силу нарушения... эээ... так сказать "паттерна > проектирования" что нельзя тело except оставлять пустым, > то что же тогда должно быть здесь в теле except?
Посылай с такими утверждениями на .... Думай своей головой.
-
> Добежал (16.01.09 21:01) [28]
Я уже отвечал в > Mystic © (16.01.09 18:06) [4]. В теле except должно быть тип исключения, который ты хочешь игнорировать.
-
догматизм это не есть хорошо )
-
Eraser © (16.01.09 21:20) [32] Хаскел изучаем?
oxffff © (16.01.09 20:45) [24] У тебя произошла ошибка неизвестно где и программа продолжила свой ход, если это Hello world да и черт с ним, если что то сложнее то что то надо делать кроме ;
-
> Добежал (16.01.09 17:48)
программа будет тихо не открывать документ. на первый, второй, третий, N-й раз, пока юзер не выйдет из себя и: 1. не выкинет программу в корзину 2. не напишет гневный мейл/звонок/тираду на совещании А если б except вообще бы не было, был был вопль в рабочем порядке, и проблема решилась бы if`ом. Ясное дело, что проблема не в юзерах и не в except, а в трансляции OLE-ексептиозов в дельфайные
-
> Ганя (16.01.09 17:51) [1] > > По хорошему, такие ситуации надо разруливать не try-except' > ом, а IF'ом > IF before_print_script_Exists then ...
try except для того и придуман в частности, чтобы не плодить эти самые if then и не захламлять ими код. Место возникновения ошибки отделено от места ее обработки.
Так что хочешь try..except хочешь if then, хочешь их вместе. Все едино. Кому как нравится.
Лично я не вижу ничего зазорного в пустом except. Или в таком:
try n := strtoint(s); except n := 0; end;
-
Да "все банально до тривиальности". Программист "А" пишет плохой "код А": try
Window:=Document.parentWindow;
Window.before_print_script;
except ;
end; Через пару месяцев программист "Б" пишет плохой "код Б", дорабатывая "код А": try
Window:=Document.parentWindow;
Window.adjust_print_script;
Window.before_print_script;
except ;
end; Через неделю программиста "А" заставляют искать ошибку в его методе печати из-за жалоб разгневанных пользователей, потому что adjust_print_script тоже может не быть, и печать не работает. Ну и ясен пень, "виноват программист Б"?.. При написании кода нужно добавлять еще одно измерение - Время. Или придерживаться принципа - подтер себе, убери за товарищем?.. Впрочем, такой код можно писать, если после компиляции исходники уничтожаются - и писать просто, и поддерживать не нужно.
-
Владислав (16.01.09 22:21) [36] Вот ты счас серьезно или ради красного словца?
-
Владислав (16.01.09 22:21) [36]
> Впрочем, такой код можно писать, если после компиляции исходники > уничтожаются - и писать просто, и поддерживать не нужно. >
Исходники надо уничтожать всегда. Иногда лучше до написания
-
> test (16.01.09 21:48) [33] > > oxffff © (16.01.09 20:45) [24] > У тебя произошла ошибка неизвестно где и программа продолжила > свой ход, если это Hello world да и черт с ним, если что > то сложнее то что то надо делать кроме ;
Ты внимательно код смотрел?
Значит давай разберем.
У тебя есть некоторые операции, которые могут привести к исключению и детерминированно установить такой исход ты не в состоянии. Однако есть требование не вылетать при этой операции. И логировать кривой ее исход. При противодействии исключению операции, логированиии, ты же понимаешь, что противодействии исключению, логирование - это такая же операция, как и другие, и она также может вызвать исключение. Особенно, если код делегирован некоторому контракту(логирование в файл, логирование в БД, логирование по E-mail).
Тогда ты делаешь так.
try try ....
if TRUE then showmessage('CONST_OK') else showmessage('NOT'); except result:=const_EXCEPTION;
//Здесь ты противодействуешь исключению, пытаешься восттановить состояние, логируешь кривой исход операции. //или просто raise; end; except //Это для того, когда ничего не помогло, а работать надо дальше. end;
Теперь тебе понятно?
P.S. Только приехал с больнички, ездил обогреватель отвозил, у нас -30.
|