Конференция "Прочее" » Тем, кто утверждает, что тело except не должно быть пустым
 
  • vuk © (17.01.09 16:17) [100]
    Ок. Вываливаться с треском. Ситуация. При форматировании сообщения и EventLog получилось так, что приложение, добавившее запись, свалило туда полную ахинею и при форматировании вылетает Access Violation. Что делать-то, вываливаться с криками "Нас обманули!" или таки удушить этот AV и продолжить разбор записи из лога дальше?
  • Anatoly Podgoretsky © (17.01.09 16:37) [101]
    > vuk  (17.01.2009 16:17:40)  [100]

    Сообщить об этом, а не в тихаря, делать вид, что все хорошо прекрасная маркиза.
  • Кто б сомневался © (17.01.09 16:38) [102]

    > Молчаливое гашение ошибок программы - ОЧЕНЬ дурной стиль.


    Я часто создаю собственные Exception и перехватываю их в других местах программы. Да я гашу их, - т.е. не показывают юзеру - а юзеру это и не надо. Можно возвращать ошибку через функцию, но удобнее через exception. Кто сказал что так делать нельзя?
  • Кто б сомневался © (17.01.09 16:39) [103]

    > Кто сказал что так делать нельзя?


    Как раз наоборот.
  • vuk © (17.01.09 16:42) [104]
    to Anatoly Podgoretsky ©   (17.01.09 16:37) [101]:
    >Сообщить об этом, а не в тихаря, делать вид, что все хорошо прекрасная
    >маркиза.
    Кому нужно это сообщение, если интересует, что находится в логе, а не накосячило ли приложение при записи туда.

    Кстати. Кто-нибудь когда-нибудь наблюдал, что делают системные утилиты при разборе логов? Они именно пропускают ошибочные части сообщений и продолжают разбор. И никому ничего лишнего не сообщают.
  • Игорь Шевченко © (17.01.09 16:52) [105]
    vuk ©   (17.01.09 16:42) [104]


    > Они именно пропускают ошибочные части сообщений и продолжают
    > разбор. И никому ничего лишнего не сообщают.


    Сообщают. Как минимум, о том, что не смогли разобрать.
  • Юрий Зотов © (17.01.09 16:57) [106]
    > vuk ©

    1. Это ошибка данных, а речь шла об ошибках программы.

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

    3. Системные утилиты - штука хорошая, но их тоже пишут люди.

    > Кто б сомневался ©   (17.01.09 16:38) [102]
    > Кто сказал что так делать нельзя?

    Никто не говорил. И Вы не гасите ошибки, а обрабатываете их. Так делать не только можно, но и нужно (когда это возможно, конечно).
  • vuk © (17.01.09 17:01) [107]
    to Игорь Шевченко ©   (17.01.09 16:52) [105]:
    >Сообщают. Как минимум, о том, что не смогли разобрать.
    Это, обычно, если сообщение целиком не смогли достать. В некоторых случаях ты можно пронаблюдать в тексте сообщения сроки вида %123. То есть не смогли достать и оставили как было. И сообщений об ошибке там не будет.
  • oxffff © (17.01.09 17:06) [108]

    > Anatoly Podgoretsky ©   (17.01.09 15:20) [97]
    > > oxffff  (17.01.2009 14:22:35)  [95]
    >
    > Не уходи от темы, тебе нужна была обработка любого, заранее
    > неизвестного исключения, теперь ты придераешься к форме.
    >
    > Не нравится ErrorDialog замени на ErrorLog или на что хочешь,
    >  на твое любимое.


    Вы не внимательно читаете.
    Логирование задания происходит через контракт с внешней реализацией.
    Логирование идет через ILOG. У меня нет внутреннего логирования.
    Мне не нужен ErrorDialog, у меня эта ситуация обрабатывается в

    procedure DoTask(const Task:ITask;const Log:ILog);
    begin
    try
    Log.Inform('Task Start');
    except
    end;
    try
     try
     Task.Start;
     except
        try
        Task.TryToCloseTask;
        except
        end;
     Log.Inform('Task Error');
     raise
    ;
     end;

     try
     Log.Inform('Task End');
     except
     end;
    except
    end;
    end;

    Вы мне пытаетесь втюхать внутренее логирование программы,его нет.
    я вам в четвертый раз повторяю. Что логирование через внешнюю реализацию-интрефейс. А если так, то значит если возникло исключение при выполнении задания, то мы вызываем логирование, а поскольку оно внешее(ну нет реализации внутреннего логирования), то в нем может произойти исключение(нет места, обрыв соединения и т.д., отказ от... т.е. совершенно произвольное исключение, которое еще объявлено во внешней программе). Поэтому само логирование тоже нужно защитить пустым
    except
    end;

    Я надеюсь теперь вам понятно или опять как в [14] и [15]?

    Да и ответьте на вопрос, что должна делать среда, если в одном из ее плагинов произошло исключение, пропускать ее дальше, если она не знает его природу(т.е. чтобы приложение рухнуло) и все таки гасить при переходе в другую зону ответственности.
    Вы боитесь отвечать на этот вопрос?
  • vuk © (17.01.09 17:10) [109]
    to Юрий Зотов ©   (17.01.09 16:57) [106]:
    >Это ошибка данных, а речь шла об ошибках программы.
    Юр, это ошибка чужих данных, результат которой приводит к AV в моей программе, но заствить другую софтину писать в лог правильно я не могу. Могу только обработать возникающие ошибки (иногда задавив исключения). При этом запись из лога должна быть показана настолько, насколько удалось вытянуть информацию.

    >Иначе, если программа интерактивная, то можно где-нибудь (например, в
    >статусбаре) уведомить юзера, что лог будет показан не весь и продолжать
    >его разбор.
    В том-то и дело, что лог должен показываться весь. А то, что сообщение не смогли отформатировать, это иногда вставляется в сообщение, иногда нет и в этом случае часть сообщения, которую не удалось достать, остается без изменений .
  • Anatoly Podgoretsky © (17.01.09 17:12) [110]
    > vuk  (17.01.2009 16:42:44)  [104]

    Так тож логи, задача строго протиположная. Но можно и сообщить, в виде строчки, что часть лога повреждена, но там и блок особо не нужен.
  • oxffff © (17.01.09 17:14) [111]
    Юрий Зотов ©   (17.01.09 16:57) [106]
    Игорь Шевченко ©   (17.01.09 16:52) [105]

    Уважаемые, ответьте мне на вопрос [108] последний абзац.
    Только не забывайте в моем случае сама операция логирования внешняя ILOG, и нет никакого внутреннего логирования.
    Что делать, если при логировании возникло исключение, и программа работает в фоновом режиме(нет GUI).
    Пользователь видит все операции только через ILOG(внешний).
    Заранее благодарен.

    А то вы предлагаете пропустить это исключение дальше, нарушив просто все, завалив среду и все другие задания. Как вы говорите с треском.
  • Юрий Зотов © (17.01.09 17:15) [112]
    > vuk ©   (17.01.09 17:10) [109]
    > лог должен показываться весь.

    Так и покажи его весь. В каком виде сможешь, в таком и покажи. Но нужно каким-то образом уведомить юзера о том, что в логе есть ошибки. Это и будет нормальной обработкой исключений, а не их молчаливым гашением.
  • oxffff © (17.01.09 17:16) [113]

    > vuk ©   (17.01.09 17:10) [109]
    > to Юрий Зотов ©   (17.01.09 16:57) [106]:
    > >Это ошибка данных, а речь шла об ошибках программы.
    > Юр, это ошибка чужих данных, результат которой приводит
    > к AV в моей программе, но заствить другую софтину писать
    > в лог правильно я не могу.
    Могу только обработать возникающие
    > ошибки (иногда задавив исключения). При этом запись из лога
    > должна быть показана настолько, насколько удалось вытянуть
    > информацию.


    Они этого не понимают или не видят.
    Я уже 3 страницы пытаюсь объяснить нашим уважаемым,
    но что пока не получается.
  • oxffff © (17.01.09 17:17) [114]

    > Но нужно каким-то образом уведомить юзера о том, что в логе
    > есть ошибки.


    Опять за свое. Нет никакого внутреннего логирования.
  • Юрий Зотов © (17.01.09 17:19) [115]
    > oxffff ©   (17.01.09 17:14) [111]

    > Что делать, если при логировании возникло исключение, и программа
    > работает в фоновом режиме(нет GUI).

    Зависит от того, что это за программа и что она делает. Если вываливаться нельзя, то, возможно, о внутреннем логировании как раз и стоит подумать.

    Но не делать вид, что все хорошо, когда не все хорошо.
  • Anatoly Podgoretsky © (17.01.09 17:24) [116]
    > oxffff  (17.01.2009 17:14:51)  [111]

    Ну пошли письмо.
  • Юрий Зотов © (17.01.09 17:25) [117]
    > oxffff

    1. Сдержанность и вежливость - достоинства, а не пороки.

    2. Есть одно хорошее правило - критикуй не оппонента, а его точку зрения.

    3. Подумайте о том, что и Вам тоже пытаются объяснить, тоже на 3-х страницах и тоже не получается.
  • vuk © (17.01.09 17:37) [118]
    Юр, не надо меня агитировать за обработчики исключений. Я их сам всегда пишу. И этот случай с логом - чуть ли не единственный (других вообще не помню), когда я исключения удавил. Там просто алгоритм такой был, что при возникновении ошибок функция должна была вернуть пустую строку, ну так она была в Result прописана с самого начала и исключение можно было давить.

    На самом деле меня больше убивает то, что многие так пишут, будто ошибок вообще не может быть. Автор FastReport-а этим отличался. Не знаю как сейчас, может и исправился, но раньше водилось за ним такое.
  • Игорь Шевченко © (17.01.09 18:13) [119]
    oxffff ©   (17.01.09 17:14) [111]

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