Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
 
  • _слонярка (16.01.09 20:17) [20]
    > TURSCmdMngr.OnAccUsrChangePwd2
    кризис в действии? стараетесь лишний раз не стирать клавиши на клавиатуре? :)
  • Anatoly Podgoretsky © (16.01.09 20:18) [21]
    > Anatoly Podgoretsky  (16.01.2009 19:48:14)  [14]

    Извиняюсь, рабочий, не заметил кое что, но даже в этом коде можно result := CONST_EXCEPTION; перенести выше и except будет уже не пустой, так что данный код не может быть аргументом.
  • b z (16.01.09 20:29) [22]

    > А обработка ошибок отменена указом президента?
    Вот проссматривая наткнулся:
    - "вся маета от привычки считать возбужденный эксепшен ошибкой"
    тут http://pda.delphimaster.net/?id=1231979318&n=3&p=5 [88]
  • oxffff © (16.01.09 20:30) [23]

    > Anatoly Podgoretsky ©   (16.01.09 20:18) [21]
    > > Anatoly Podgoretsky  (16.01.2009 19:48:14)  [14]
    >
    > Извиняюсь, рабочий, не заметил кое что, но даже в этом коде
    > можно result := CONST_EXCEPTION; перенести выше и except
    > будет уже не пустой, так что данный код не может быть аргументом.
    >


    Почему?
    +
    Есть например [7]  с учетом [12].
  • oxffff © (16.01.09 20:45) [24]
    Еще например пример из моего кода.
    try
       try
       ....

       if TRUE then showmessage('CONST_OK') else showmessage('NOT');
       except
       result:=const_EXCEPTION;
    //Делаем вещи по обработке исключения, но они могут привести к другому исключению.
    //или просто  raise;
       end;
    except
    end;


    Внешний пустой try\except глотает все неизвестное.
  • Anatoly Podgoretsky © (16.01.09 20:46) [25]
    > oxffff  (16.01.2009 20:30:23)  [23]

    Я про конкретный, а не про все варианты. В конкретном нет разницы между

    except
    end;
    result := CONST_EXCEPTION;

    и

    except
    result := CONST_EXCEPTION;
    end;

    И мне второй вариант приятнее, не говоря уже об верхних строках.
  • oxffff © (16.01.09 20:51) [26]

    > Anatoly Podgoretsky ©   (16.01.09 20:46) [25]


    Тогда  [24], либо [7]+[12].
  • Anatoly Podgoretsky © (16.01.09 20:54) [27]
    > oxffff  (16.01.2009 20:45:24)  [24]

    Вот это другое, похоже кусок сервера или служды, но я бы не стал делать пустым, а включил бы управляемое логирование.
  • Добежал (16.01.09 21:01) [28]
    блин, народ понес свои примеры...
    Но все таки, господа, я бы хотел рассмотреть свой пример :))

    Если код:

    try
    Window:=Document.parentWindow;
    Window.before_print_script;
    except ;
    end;



    Неправильный в силу нарушения... эээ... так сказать "паттерна проектирования" что нельзя тело except оставлять пустым, то что же тогда должно быть здесь в теле except?
  • oxffff © (16.01.09 21:05) [29]

    > Anatoly Podgoretsky ©   (16.01.09 20:54) [27]
    > > oxffff  (16.01.2009 20:45:24)  [24]
    >
    > Вот это другое, похоже кусок сервера или служды, но я бы
    > не стал делать пустым,
    а включил бы управляемое логирование.
    >


    Я естестенно пишу, как [7],[8],[10],[24] в зависимости от ситуации.
    Я придерживаюсь простой для меня истины, есть разные способы решения.
    Но не один.
  • oxffff © (16.01.09 21:08) [30]

    > Неправильный в силу нарушения... эээ... так сказать "паттерна
    > проектирования" что нельзя тело except оставлять пустым,
    >  то что же тогда должно быть здесь в теле except?


    Посылай с такими утверждениями на ....
    Думай своей головой.
  • Mystic © (16.01.09 21:12) [31]
    > Добежал   (16.01.09 21:01) [28]

    Я уже отвечал в > Mystic ©   (16.01.09 18:06) [4]. В теле except должно быть тип исключения, который ты хочешь игнорировать.
  • Eraser © (16.01.09 21:20) [32]
    догматизм это не есть хорошо )
  • test (16.01.09 21:48) [33]
    Eraser ©   (16.01.09 21:20) [32]
    Хаскел изучаем?

    oxffff ©   (16.01.09 20:45) [24]
    У тебя произошла ошибка неизвестно где и программа продолжила свой ход, если это Hello world да и черт с ним, если что то сложнее то что то надо делать кроме ;
  • Petr V. Abramov © (16.01.09 22:11) [34]

    > Добежал   (16.01.09 17:48)  

    программа будет тихо не открывать документ. на первый, второй, третий, N-й раз, пока юзер не выйдет из себя и: 1. не выкинет программу в корзину 2. не напишет гневный мейл/звонок/тираду на совещании
    А если б except вообще бы не было, был был вопль в рабочем порядке, и проблема решилась бы if`ом.
    Ясное дело, что проблема не в юзерах и не в except, а в трансляции OLE-ексептиозов в дельфайные
  • DVM © (16.01.09 22:15) [35]

    > Ганя   (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;
  • Владислав (16.01.09 22:21) [36]
    Да "все банально до тривиальности".

    Программист "А" пишет плохой "код А":

    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 тоже может не быть, и печать не работает.

    Ну и ясен пень, "виноват программист Б"?..

    При написании кода нужно добавлять еще одно измерение - Время.

    Или придерживаться принципа - подтер себе, убери за товарищем?..

    Впрочем, такой код можно писать, если после компиляции исходники уничтожаются - и писать просто, и поддерживать не нужно.
  • test (16.01.09 22:39) [37]
    Владислав   (16.01.09 22:21) [36]
    Вот ты счас серьезно или ради красного словца?
  • Игорь Шевченко © (16.01.09 22:45) [38]
    Владислав   (16.01.09 22:21) [36]


    > Впрочем, такой код можно писать, если после компиляции исходники
    > уничтожаются - и писать просто, и поддерживать не нужно.
    >


    Исходники надо уничтожать всегда. Иногда лучше до написания
  • oxffff © (16.01.09 22:50) [39]

    > 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.
 
Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
Есть новые Нет новых   [134453   +34][b:0.001][p:0.001]