Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
 
  • vuk © (17.01.09 01:10) [60]
    Вот, помнится, Рихтер, при разборе сообщений системного журнала рекомендовал заворачивать вызов FormatMessage в блок обработки исключений а исключения игнорировать... А там вылезти может все что угодно, вплоть до Access violation.
  • Anatoly Podgoretsky © (17.01.09 01:12) [61]
    > oxffff  (17.01.2009 0:25:56)  [56]

    Я за то, что солнце встает на западе, кто ЗА
  • Германн © (17.01.09 01:30) [62]

    > vuk ©   (17.01.09 01:10) [60]
    >
    > Вот, помнится, Рихтер...

    Не понял. Это пост ЗА или ПРОТИВ?
    :)
  • vuk © (17.01.09 01:35) [63]
    to Германн ©   (17.01.09 01:30) [62]:
    А чего непонятного-то? Ну бывают случаи, когда на исключение нужно забить. И если это действительно нужно, то я не понимаю, зачем делать догму из наличия кода в обработчике.
  • Германн © (17.01.09 01:43) [64]

    > vuk ©   (17.01.09 01:35) [63]
    >
    > to Германн ©   (17.01.09 01:30) [62]:
    > А чего непонятного-то? Ну бывают случаи, когда на исключение
    > нужно забить.

    Да я-то понял. Но Рихтер не дельфист. (Не. Кто-то из мастеров, по-моему я знаю кто, написал в шутку, что Рихтер "пишет книгу по Дельфи, но "в стол""). Но в Дельфи немного другая ситуация. Дельфи - это в первую очередь RAD-система рассчитанная на использование компонент. А вот уже при написании компонент такой подход недопустим ни в коем случае!
  • vuk © (17.01.09 01:46) [65]
    to Германн ©   (17.01.09 01:43) [64]:
    >Да я-то понял. Но Рихтер не дельфист.
    А какая разница-то, на чем писать код игнорирующий исключения?

    >Дельфи - это в первую очередь RAD-система
    Это средство программирования. И задачи разные бывают. Я, вот, системный журнал парсил.
  • Германн © (17.01.09 02:05) [66]

    > vuk ©   (17.01.09 01:46) [65]
    >
    > to Германн ©   (17.01.09 01:43) [64]:
    > >Да я-то понял. Но Рихтер не дельфист.
    > А какая разница-то, на чем писать код игнорирующий исключения?
    >
    >

    Вот я лично нарвался на серьёзную проблему при использовании стороннего компонента, в котором в одном из методов был тот самый пустой блок except. Программа моя вылетала молча. А я никак не мог понять почему!
    P.S. Я уже не первый раз на этом форуме об этом конкретном случае говорю. И автор сего компонента - весьма уважаемый среди дельфистов. (По времени своего появления сравним с автором QR. По своей грамотности - гораздо выше).
    А что знает Джеффри про некие компоненты?
  • vuk © (17.01.09 02:18) [67]
    to Германн ©   (17.01.09 02:05) [66]:
    >Вот я лично нарвался на серьёзную проблему при использовании
    >стороннего компонента, в котором в одном из методов был тот самый
    >пустой блок except.

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

    >А что знает Джеффри про некие компоненты?
    А зачем оно ему? Он книжку писал про разработку под W2K. А уж на чем писать, тут разницы нет.
  • Германн © (17.01.09 02:23) [68]

    > vuk ©   (17.01.09 02:18) [67]
    >
    > to Германн ©   (17.01.09 02:05) [66]:
    > >Вот я лично нарвался на серьёзную проблему при использовании
    > >стороннего компонента, в котором в одном из методов был
    > тот самый
    > >пустой блок except.
    >
    > Ну написал кто-то кривой компонент. Так ведь из кривизны
    > конкретного компонента вовсе не следует, что обработчик
    > должен быть пустым или не пустым. Потому что с равной вероятностью
    > обработчик может быть написан так, что будет приводить к
    > неверному функционированию.
  • Германн © (17.01.09 02:29) [69]
    Случайно нажал "Добавить".

    В методе того компонента был тот самый пустой блок except. Но в том методе вызывался пользовательский обработчик. Так вот ошибка была именно в нём. Я ожидал, что, если будет ошибка, то будет и сообщение об ощибке! Ан нет.
  • Игорь Шевченко © (17.01.09 03:06) [70]
    vuk ©   (17.01.09 02:18) [67]


    > >А что знает Джеффри про некие компоненты?
    > А зачем оно ему? Он книжку писал про разработку под W2K.
    >  А уж на чем писать, тут разницы нет.


    В стол :)

    А если по теме, то можно использовать и пустой блок except end и goto, Аллах простит. И компилятор откомпилирует без хинтов и предупреждений.

    Хотя лично я за то, что если в программе ошибка, то пусть она вылетает с максимально громким треском - ее найти при этом проще.
  • Германн © (17.01.09 04:05) [71]

    > Игорь Шевченко ©   (17.01.09 03:06) [70]
    >
    > vuk ©   (17.01.09 02:18) [67]
    >
    >
    > > >А что знает Джеффри про некие компоненты?
    > > А зачем оно ему? Он книжку писал про разработку под W2K.
    >
    > >  А уж на чем писать, тут разницы нет.
    >
    >
    > В стол :)

    В стол.
    Не. Ну это не ты первый упомянул сей термин, зафиксированный в Орешнике! Или ты?
    В общем-то без разницы, лишь ради исторической справедливости.
  • test (17.01.09 08:40) [72]
    Игорь Шевченко ©   (17.01.09 03:06) [70]
    Не обязательно вылетать, часть ошибок можно обработать.

    oxffff ©   (17.01.09 00:09) [54]
    Тебе дадут на сопровождение прогу которая писалась 5 лет назад с пустыми исключениями, может тогда поймеш в чем зло этого подхода.
  • Sergey Masloff (17.01.09 10:52) [73]
    test   (17.01.09 08:40) [72]
    +1

    Кстати хотелось бы увидеть пример и описание условий в которых может произойти ЛЮБОЕ исключение и нельзя написать on E:Tконкретный класс исключений ;
  • {RASkov} © (17.01.09 11:18) [74]
    Вот раздули.... :) Какая разница пустой блок или не пустой, нужно писать грамотно и с трезвой головой с учетом на будущее, а там не важно как ты пишешь.... или хотите сказать так не бывает? Бывает.
  • oxffff © (17.01.09 11:46) [75]

    > test   (17.01.09 08:40) [72]


    Не нужно перегибать палку.
    Я привел пример, когда это востребовано и оправдано.
    А ты пытаешься перефразировать мои слова на свой лад.


    >Sergey Masloff   (17.01.09 10:52) [73]


    Есть мой многопоточный планировщик запуска некоторых заданий в зависимости от изменений в файловой системе. Если мне не изменяет память построен на IOComplentionPort. Причем само задание и логирование его исполнения - это ислючительно контракт.
    Итак упрощенно есть ITask, ILog.

    Cхема у меня в реальном проекте на несколько уровней try больше.
    Упрощено так.

    try
      ILog.Infrom('Task Start');
           try
           ITask.Start;
           except
           ILog.Infrom('Task Error');
           raise;
           end;
      ILog.Infrom('Task End');
    except
    //Попадаем сюда в случае сбоя ILog или при сбоя ITask.
    end;
  • Sergey Masloff (17.01.09 11:53) [76]
    oxffff ©   (17.01.09 11:46) [75]
    То есть никто у тебя не стартовал, лог тоже сбойнул никто про это не узнал все хорошо. Спасибо, следующий ;-)))
  • oxffff © (17.01.09 11:59) [77]

    > Sergey Masloff   (17.01.09 11:53) [76]
    > oxffff ©   (17.01.09 11:46) [75]
    > То есть никто у тебя не стартовал, лог тоже сбойнул никто
    > про это не узнал все хорошо. Спасибо, следующий ;-)))


    Ты что глупый?

    Во первых
    >Cхема у меня в реальном проекте на несколько уровней try больше.

    В главных

    Лог это возможность информировать пользователя.
    Если он сбойнул, то этой возможности нет.
  • oxffff © (17.01.09 12:03) [78]

    > Sergey Masloff   (17.01.09 11:53) [76]


    Ты слышал про Double Fault?
  • oxffff © (17.01.09 12:05) [79]

    > Sergey Masloff   (17.01.09 11:53) [76]


    На самом деле у меня ILog.Infrom('Task Start') тоже оборачиваются.
    Но я специально упростил, чтобы было понятней.
 
Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
Есть новые Нет новых   [134453   +32][b:0.001][p:0.001]