Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
 
  • test (16.01.09 22:58) [40]
    oxffff ©   (16.01.09 22:50) [39]
    Ошибка она видимо неустранимо в принципе? Логирование оно не может работать в принципе? Не стандартные ситуации не предсказуемы?
  • oxffff © (16.01.09 23:10) [41]

    > test   (16.01.09 22:58) [40]
    > oxffff ©   (16.01.09 22:50) [39]
    > Ошибка она видимо неустранимо в принципе? Логирование оно
    > не может работать в принципе? Не стандартные ситуации не
    > предсказуемы?


    Именно так.
    Ошибка не известна(либо намеренно игнорирована) и поэтому не устранима.  
    Если у тебя есть только контракт по логированию, реализация тебе не известна, подключается run time, но тебе нужно обеспечить нормальное продолжение после операции(возможно даже не известной).


    > Ошибка она видимо неустранимо в принципе?


    Да, если она не известна.


    > Логирование оно не может работать в принципе?


    Да, если логирование через делегат.

    Не стандартные ситуации не предсказуемы?

    Безусловно.
  • Владислав © (16.01.09 23:20) [42]

    > 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]
    >
    >
    > > Впрочем, такой код можно писать, если после компиляции
    > исходники
    > > уничтожаются - и писать просто, и поддерживать не нужно.
    >
    > >
    >
    >
    > Исходники надо уничтожать всегда. Иногда лучше до написания


    Игорь, это была шутка, сарказм, или еще что-то? Я не понял :)
  • Mystic © (16.01.09 23:35) [43]

    > Лично я не вижу ничего зазорного в пустом except. Или в
    > таком:


    Зазорно/не зазорно, но многим приходилось вылавливать ошибки других из-за try ... except end; Так что эти грабли есть. Конечно, в приведенном тобой коде трудно представить себе ошибку. Но если s это поле класса, который по непонятным причинам в этот момент уже nil, программа будет работать как ни в чем не бывало и выдавать результат 0. Это несколько сбивает с толку, потому что процесс поиска направлен в сторону нахождения момента, где в поле s записывается нецелое число. Подобные ситуации были в моей практике неоднократно.

    Мне непонятно, почему нельзя добавить всего одну строку и избежать таких проблем?


     try
       n := strtoin(s);
     except
       on E: EConvertError do
         n := 0;
     end;

  • oxffff © (16.01.09 23:38) [44]

    > Mystic ©   (16.01.09 23:35) [43]
    >
    > > Лично я не вижу ничего зазорного в пустом except. Или
    > в
    > > таком:
    >
    >
    > но многим приходилось вылавливать ошибки
    > других из-за try ... except end;


    Что ошибки вылетали из такого?

    try
    //Do something very wrong.
    ...
    except
    //пусто
    end;
  • oxffff © (16.01.09 23:41) [45]

    >  try
    >    n := strtoin(s);
    >  except
    >    on E: EConvertError do
    >      n := 0;
    >  end;


    Такого рода решение зависит от поставновки задачи. А именно

    1. Устанавливать значение по умолчанию
    2. или бить тревогу.
    3. Ведь может же быть что-то другое.
  • DVM © (16.01.09 23:42) [46]

    > Mystic ©   (16.01.09 23:35) [43]

    Конечно же к такому использованию try except надо подходить с умом. Т.е. если уж пустой оставляешь, то с гарантией, что проблем далее не возникнет. Ведь гораздо проще подавить к чертям исключение, особенно когда знаешь, что возникнуть может только оно и никакое другое, чем колупаться с on E: и т.д.


    > Мне непонятно, почему нельзя добавить всего одну строку
    > и избежать таких проблем?

    Лень, скорее всего.

    А пустой try except встречается постоянно у многих. И борланд тоже этим грешит.
  • Mystic © (16.01.09 23:42) [47]
    > Что ошибки вылетали из такого?

    Из такого они не вылетали, из такого они только накапливались. И долго не находились.
  • oxffff © (16.01.09 23:52) [48]

    > Mystic ©   (16.01.09 23:42) [47]
    > > Что ошибки вылетали из такого?
    >
    > Из такого они не вылетали, из такого они только накапливались.
    >  И долго не находились.


    Как раз именно ваш код позволяет их долго не находить.
    Согласно вашего кода, любые входные параметры s корректны.
    Не может быть ситуации и поэтому она просто не обрабатывается, когда входной параметр не корректен.
    Более того, если пользователь например ввел 1223O333, что визуально корретна, программа проглотит без вопросов.
    Однако пользователь увидит не тот результат, который должен быть для
    12230333.

    А управляемая ракета полетит мимо. :)

    Это вопрос постановки задачи.



    Ведь накапливались из-за этого самого вашего кода. :)

    Ваш код говорит, что ошибок в принципе нет.
  • oxffff © (16.01.09 23:55) [49]

    > Mystic ©   (16.01.09 23:42) [47]


    Естественно я никак не хочу, как то дискредитировать это решение.
    Я просто подвожу всех и себя к мысли, что нельзя сказать именно так хорошо и никак иначе. :)
  • DVM © (16.01.09 23:55) [50]

    > oxffff ©   (16.01.09 23:52) [48]


    > Согласно вашего кода, любые входные параметры s корректны.
    >  

    это скорее обо мне :)
  • Mystic © (16.01.09 23:56) [51]

    > А пустой try except встречается постоянно у многих. И борланд
    > тоже этим грешит.


    Пустой try...except имеет свой смысл. Обычно применяется там, где надо выполнить некоторую второстепенную последовательность действий абсолютно не заботясь о результате. Например, записать в лог строку. Тут мы хотим гарантировать, чтоб какой кошмар там не случился, но программа бы не завалилась.
  • Eraser © (16.01.09 23:59) [52]
    > [41] oxffff ©   (16.01.09 23:10)

    давайте тогда каждую строку оборачивать в try..except и на заносить отчет об ошибке в лог, в случае чего. все исключения (в т.ч. обработанные) логировать полезно, но централизовано, с помощью спец. средств.
    в данном случае вполне достаточно
    try
     Window.adjust_print_script;
    except
     // Не удалять блок try..except, т.к.....
    end;


    благо такие случаи редкость.
  • oxffff © (17.01.09 00:04) [53]

    > Eraser ©   (16.01.09 23:59) [52]
    > > [41] oxffff ©   (16.01.09 23:10)
    >
    > давайте тогда каждую строку оборачивать в try..except


    Это уже параноидальный подход.
    Достаточно защищить только опасный или неизвестный код, который может привести к другому потоку программы, и когда именно определенный поток действий программы должен соблюдаться не смотря ни на что.
  • oxffff © (17.01.09 00:09) [54]

    > Mystic ©   (16.01.09 23:42) [47]
    > > Что ошибки вылетали из такого?
    >
    > Из такого они не вылетали, из такого они только накапливались.
    >  И долго не находились.


    Естественно, но нужно же устанавливать некий признак неудачи и проверять для продолжения дальнейших действий.
    Я уверен мы все все понимаем.
    А от темы мы уже ушли, как всегда. :)

    Вопрос может ли быть полезен пустой код except?

    Мой ответ - ДА.

    А Ваш?
  • Mystic © (17.01.09 00:23) [55]
    > Вопрос может ли быть полезен пустой код except?

    Может быть в редких случаях. Пример такого случая я уже обрисовал.
  • oxffff © (17.01.09 00:25) [56]

    > Mystic ©   (17.01.09 00:23) [55]
    > > Вопрос может ли быть полезен пустой код except?
    >
    > Может быть в редких случаях. Пример такого случая я уже
    > обрисовал.


    Уже 2 голоса ЗА!!!
    :)
  • Германн © (17.01.09 00:36) [57]

    > Может быть в редких случаях.

    Я бы сформулировал несколько по иному. Есть ряд случаев, где пустой код except категорически недопустим!
  • Игорь Шевченко © (17.01.09 00:49) [58]
    Владислав ©   (16.01.09 23:20) [42]


    > Игорь, это была шутка, сарказм, или еще что-то? Я не понял
    > :)


    Скорее пожелание авторам :)
  • Германн © (17.01.09 01:03) [59]

    > Скорее пожелание авторам :)

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