Форум: "Прочее";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизТем, кто утверждает, что тело except не должно быть пустым Найти похожие ветки
← →
Anatoly Podgoretsky © (2009-01-17 18:44) [120]> oxffff (17.01.2009 17:16:53) [113]
А та продолжай, доводы пока не убедительны.
← →
Anatoly Podgoretsky © (2009-01-17 18:46) [121]> vuk (17.01.2009 17:37:58) [118]
Да многие известные авторы грешат этим, пишут очень грязный код.
← →
test (2009-01-17 18:57) [122]oxffff © (17.01.09 17:17) [114]
Есть множество чужих интерфейсов которые что то делают, и алгоритм с пунктами а б в г д е ж з. Теперь предположим они идут подряд. Любые ошибки гасятся, выполнение не останавливается.
а
б тут не отработало
в
г
д тут не отработало
е тут не отработало
ж
з
То есть прога не жизне способная получается? Она работает исключительно в идеальных условиях, пока за компьютером сидит программист который это написал. Теперь допустим что прога не блокнот или еще какая нибудь иутилитка на пять минут, от работы которой зависит зп пользователя и работа, программист заранее вводит эффект непредсказуемости? А зачем?
← →
oxffff © (2009-01-17 19:22) [123]
> Anatoly Podgoretsky © (17.01.09 18:44) [120]
> > oxffff (17.01.2009 17:16:53) [113]
>
> А та продолжай, доводы пока не убедительны.
Ваши впрочем совершенно не убедительны. :)
← →
oxffff © (2009-01-17 19:22) [124]Удалено модератором
← →
Virgo_Style © (2009-01-17 19:29) [125]test (17.01.09 18:57) [122]
То есть прога не жизне способная получается?
Я боюсь, пока одна сторона будет подразумевать скрытие принципиальных ошибок, а другая - непринципиальных, договориться им будет трудновато.
← →
Sergey Masloff (2009-01-17 19:32) [126]Virgo_Style © (17.01.09 19:29) [125]
Если одна из сторон вообще не знает что это за ошибка откуда уверенность что эта ошибка - непринципиальна?
← →
Игорь Шевченко © (2009-01-17 19:46) [127]Совсем свежий пример: вчера пытался залогиниться на сайте demonoid.com (из ветки про много музыки). Ввожу имя и пароль, говорю submit и ничего не происходит (страница обновляется и на ней то же самое предложение залогиниться).
После того, как я вспомнил, что когда-то запретил cookies для этого сайта и убрал этот запрет, логин прошел как по маслу. На других сайтах при аналогичной ситуации появляется сообщение You must enable cookies.
К вопросу о тихом прятании ошибок.
← →
oxffff © (2009-01-17 19:56) [128]
> test (17.01.09 18:57) [122]
> oxffff © (17.01.09 17:17) [114]
> Есть множество чужих интерфейсов которые что то делают,
> и алгоритм с пунктами а б в г д е ж з. Теперь предположим
> они идут подряд. Любые ошибки гасятся, выполнение не останавливается.
>
>
> а
> б тут не отработало
> в
> г
> д тут не отработало
> е тут не отработало
> ж
> з
>
> То есть прога не жизне способная получается? Она работает
> исключительно в идеальных условиях, пока за компьютером
> сидит программист который это написал. Теперь допустим что
> прога не блокнот или еще какая нибудь иутилитка на пять
> минут, от работы которой зависит зп пользователя и работа,
> программист заранее вводит эффект непредсказуемости? А
> зачем?
Ты же опять перегибаешь палку. :)
Кто тебе сказал, что в этом случае нужно их гасить.
Если составная операция состоит из части некритических подопераций, когда их ты обернешь в пустой блок, если у тебя нет никакой информации о том, что они могут генерировать. Все остальные операциии связаные между собой ты естественно сделаешь без гашения исключений. Ты понимаешь разницу между моим примером и своим.
Мой
Есть некоторый контракт задания, есть некоторый контракт логера(а логер - это может быть txt, web, СУБД, mobile phone SMS ....).
Есть процедура, которая должна вызвать задание и залогировать начало, окончание, провал задания. Процедура см выше.
Есть процедура, которая извлекает из очереди задания в отдельном потоке и вызывает вышеумомянутую процедуру и после делает некоторые действия.
TO ALL
Мой вопрос зачем мне пускать неизвестное исключение наружу в другую зону ответственности исключений?
Где я не прав?
Покажи мне как было реализовать эту часть правильно
естественно вашего IMHO.
А я вам покажу где косяки в вашем коде.
Пойдет так?
← →
oxffff © (2009-01-17 19:57) [129]
> Игорь Шевченко © (17.01.09 19:46) [127]
Я не вижу вашего ответа, на вопрос, что должна делать среда, если плагин вызвал исключение, тихо умереть с треском по вашему?
← →
DVM © (2009-01-17 20:03) [130]Что то в последнее время на делфимастере в самые живые обсуждения по каким то ничтожным поводам. Раздули из мухи слона.
← →
oxffff © (2009-01-17 20:11) [131]
> Игорь Шевченко © (17.01.09 19:46) [127]
> Совсем свежий пример: вчера пытался залогиниться на сайте
> demonoid.com (из ветки про много музыки). Ввожу имя и пароль,
> говорю submit и ничего не происходит (страница обновляется
> и на ней то же самое предложение залогиниться).
>
> После того, как я вспомнил, что когда-то запретил cookies
> для этого сайта и убрал этот запрет, логин прошел как по
> маслу. На других сайтах при аналогичной ситуации появляется
> сообщение You must enable cookies.
>
> К вопросу о тихом прятании ошибок.
Cовершенно не коррелирует с моим примером.
Мой пример упрощенно
No GUI application
var Tasks:array[1..10] of ITask;
ExternalLoger:Ilog;
task:ITask;
begin
............
Вы предлагаете следующий вариант
for task in Tasks do
begin
try
task.execute;
except
ExternalLoger.Inform("Task Error");
end;
end;
Я утверждаю что должно быть так.
for task in Tasks do
begin
try
try
task.execute;
except
ExternalLoger.Inform("Task Error");
end;
except
end;
end;
← →
oxffff © (2009-01-17 20:13) [132]Удалено модератором
← →
test (2009-01-17 20:14) [133]Игорь Шевченко © (17.01.09 19:46) [127]
Но роботает жы )))
oxffff © (17.01.09 19:56) [128]
Да ты хоть как назови хоть контрактом хоть асбстрактом, если ты не отвечаеш за выполнение алгоритма и обработку ошибок, все твои контракты работают исключительно в идеальных условиях. Если пишеш для мамы на 8 марта красивую открытку так и пиши, если от этой программы хоть что то зависит переписывай не подставляй пользователя понопрасну.
зы
Тебе было бы легче если бы я в твоем стиле алгоритм псевдо кодом оформил?
← →
DVM © (2009-01-17 20:19) [134]
> test (17.01.09 20:14) [133]
Я извиняюсь, но пишите мягкий знак после Ш в глаголах.
← →
oxffff © (2009-01-17 20:20) [135]
> test (17.01.09 20:14) [133]
>Если пишеш для мамы на 8 марта красивую открытку
> так и пиши, если от этой программы хоть что то зависит переписывай
> не подставляй пользователя понопрасну.
Слушай давай без упонимания о родителях. А то меня это очень злит.
← →
test (2009-01-17 20:22) [136]DVM © (17.01.09 20:19) [134]
привычка. Постараюсь.
oxffff © (17.01.09 20:20) [135]
Хорошо перефразируем "чтобы одноклассникам показать красивую тулзу, то так и пиши", что злит то?
← →
oxffff © (2009-01-17 20:33) [137]
> test (17.01.09 20:14) [133]
> oxffff © (17.01.09 19:56) [128]
> Да ты хоть как назови хоть контрактом хоть асбстрактом,
> если ты не отвечаеш за выполнение алгоритма и обработку
> ошибок, все твои контракты работают исключительно в идеальных
> условиях. Если пишеш для мамы на 8 марта красивую открытку
> так и пиши, если от этой программы хоть что то зависит переписывай
> не подставляй пользователя понопрасну.
Слушай ты какой то непонятливый.
Давай на пальцах.
Существуют некий общий алгоритм(может воспринимать его как generic метод), так вот конктретно указание конкретных типов, это и есть инстанцирование обобщеного метода.
Его суть
10 независимых друг от друга заданий, которые нужно выполнить
+обобщенный контракт логгера.
По условию задачи сказано, что реализация не известна. Не известны также исключения которые они возвращают, более того реализация этих COM интерфейсов может быть написана на произвольном языке.
Мой код упрощенный снова.
for task in Tasks do
begin
try
try
task.execute;
except
ExternalLoger.Inform("Task Error");
end;
except
end;
end;
Если я не поставлю это, прощай выполнение остальных заданий, поскольку логер может дать исключение(например нет подключения), о котором ты понятия не имеешь.
Перед тем, как что-то мне писать перечитай еще раз внимательно.
← →
oxffff © (2009-01-17 20:34) [138]
> test (17.01.09 20:22) [136]
> DVM © (17.01.09 20:19) [134]
> привычка. Постараюсь.
>
> oxffff © (17.01.09 20:20) [135]
> Хорошо перефразируем "чтобы одноклассникам показать красивую
> тулзу, то так и пиши", что злит то?
Я понимаю твой намек на школу, однако боюсь как бы тебе самому не пришлось заново закончить. см. [137].
← →
Игорь Шевченко © (2009-01-17 20:34) [139]oxffff © (17.01.09 19:57) [129]
> Я не вижу вашего ответа, на вопрос, что должна делать среда,
> если плагин вызвал исключение, тихо умереть с треском по
> вашему?
Ты что, скрипач, дальтоник ? Зеленого от оранжевого отличить не можешь ?
Среда должна отреагировать на ошибку, а уж умирать ей или нет, это зависит от многих факторов.
Среда Delphi, например, при ошибке в установленном компоненте может повести себя по-разному, как то:
Тихо умереть без звука.
Очутиться в состоянии ступора, когда при нажатии на кнопку ОК в окне сообщения об ошибке возникает точно такое же сообщение (а то и два).
Выдать сообщение об ошибке и после нажатия на ОК в окне этого сообщения продолжать работать до следующего использования этого компонента.
← →
test (2009-01-17 20:35) [140]oxffff © (17.01.09 20:33) [137]
Достал, просто скажи что пишешь, чтобы не пользоваться.
← →
oxffff © (2009-01-17 20:38) [141]
> Игорь Шевченко © (17.01.09 20:34) [139]
А как же громкая смерть приложениея со скрежетом?
Вы же считаете, что нужно исключение пропустить вверх до среды. Это ислючение не будет обработано и среда сделает себе самоубийство.
Я вообще рекомендую не полагаться на чужой код, и даже логирование исключения оборачивать в SEH фрейм.
Теперь по теме.
Где я не прав в [137].
← →
Игорь Шевченко © (2009-01-17 20:39) [142]oxffff © (17.01.09 20:11) [131]
> Cовершенно не коррелирует с моим примером.
Ты явно дальтоник. Речь не идет о твоих примерах, твои примеры - это твои проблемы. Тебе уже который пост объясняют, что все зависит от типа ошибки - есть ошибки в данных и есть ошибки в программе. Впрочем, если из-за ошибки в данных дальнейшая работа программы не имеет смысла или потенциально приведет к каскадным ошибкам, то чем скорее впрограмма завершится с громким треском, тем лучше.
Хороший пример - остановка операционной системы Windows из-за ошибки в режиме ядра, казалось бы, чего проще - выгрузи сбойный драйвер и продолжай работать, как ни в чем не бывало.
Однако грамотные программисты Microsoft предпочитают останавливать систему с выдачей диагностики в виде синего экрана.
← →
Игорь Шевченко © (2009-01-17 20:41) [143]oxffff © (17.01.09 20:38) [141]
> Где я не прав в [137].
Я тебе последний раз говорю - есть ошибки в программе и есть ошибки в данных. Всякого рода плагины можно рассматривать как данные.
← →
oxffff © (2009-01-17 20:43) [144]
> Игорь Шевченко © (17.01.09 20:39) [142]
> oxffff © (17.01.09 20:11) [131]
>
>
> > Cовершенно не коррелирует с моим примером.
>
>
> Ты явно дальтоник. Речь не идет о твоих примерах, твои примеры
> - это твои проблемы. Тебе уже который пост объясняют, что
> все зависит от типа ошибки - есть ошибки в данных и есть
> ошибки в программе.
Да не дальтоник я. Просто нужно говорить прямо и не водить за нос.
Я бы добавил что еще есть ошибки внешние, суть которых установить не представляется возможным. Это именно те о которых я пишу в своих примерах. Добавьте в свою классификацию.
← →
oxffff © (2009-01-17 20:47) [145]
> Игорь Шевченко © (17.01.09 20:41) [143]
> oxffff © (17.01.09 20:38) [141]
>
>
> > Где я не прав в [137].
>
>
> Я тебе последний раз говорю - есть ошибки в программе и
> есть ошибки в данных. Всякого рода плагины можно рассматривать
> как данные.
Нельзя брить всех одинаково. от этого
← →
oxffff © (2009-01-17 20:49) [146]
> test (17.01.09 20:35) [140]
> oxffff © (17.01.09 20:33) [137]
> Достал, просто скажи что пишешь, чтобы не пользоваться.
Ты либо глуп , либо и в правду не хочешь вникать в суть и решил отделаться только общими фразами.
← →
Игорь Шевченко © (2009-01-17 20:49) [147]oxffff © (17.01.09 20:43) [144]
Нету внешних ошибок. Все ошибки делятся на две категории, которые должен исправлять программист и которые должен исправлять пользователь.
На первую категорию ошибок однозначно надо реагировать вылетом с треском, на вторую - все зависит от задачи.
← →
test (2009-01-17 20:55) [148]Игорь Шевченко © (17.01.09 20:49) [147]
Бесполезно пока его сам по граблям не пройдет не успокоиться.
← →
test (2009-01-17 20:56) [149]Игорь Шевченко © (17.01.09 20:49) [147]
Бесполезно, пока сам по граблям не пройдет не успокоиться. Ошибок у него не существует блин.
← →
oxffff © (2009-01-17 20:56) [150]
> Игорь Шевченко © (17.01.09 20:49) [147]
> oxffff © (17.01.09 20:43) [144]
>
> Нету внешних ошибок. Все ошибки делятся на две категории,
> которые должен исправлять программист и которые должен
> исправлять пользователь.
> На первую категорию ошибок однозначно надо реагировать вылетом
> с треском, на вторую - все зависит от задачи.
Тогда ошибка в плагине, который генерирует неизвестное исключение(вызванное например потерей соединения - а это безусловно ошибка программиста), должно приводить к вылету с треском всей среды по идеалогии, которой вы придерживаетесь.
Однако есть другая точка зрения.
Есть зоны ответственности реагирования на ошибки частей приложения.
И одни части должны защищать себя от ошибок других частей.
И крах одних не должен приводить к краху других.
А внешние ошибки воспринимать как данные - это заниматься самообманом.
← →
oxffff © (2009-01-17 20:57) [151]
> test (17.01.09 20:56) [149]
> Игорь Шевченко © (17.01.09 20:49) [147]
> Бесполезно, пока сам по граблям не пройдет не успокоиться.
> Ошибок у него не существует блин.
Ты понимаешь, что такое generic метод?
Если нет учи мат. часть.
← →
vuk © (2009-01-17 20:59) [152]to Игорь Шевченко © (17.01.09 20:49) [147]:
>Все ошибки делятся на две категории, которые должен исправлять
>программист и которые должен исправлять пользователь.
>На первую категорию ошибок однозначно надо реагировать вылетом с
>треском, на вторую - все зависит от задачи.
А куда относится AV при форматировании сообщений системного журнала? Эта ошибка не может быть исправлена программистом, т.к. это ошибка в информации занесенной в лог, допущенная совсем другой софтиной. И уж подавно, это не может быть исправлено пользователем.
← →
oxffff © (2009-01-17 21:05) [153]
> test (17.01.09 20:56) [149]
> Игорь Шевченко © (17.01.09 20:49) [147]
> Бесполезно, пока сам по граблям не пройдет не успокоиться.
> Ошибок у него не существует блин.
Ошибки для меня существуют. И поверь, что я не отстаиваю точку зрения что except end должен быть пустым всегда. Более того я и пишу, как все мои оппоненты, либо информативные коды возвратов, либо дерево классов исключений с проверкой в except end.
Я отстаиваю точку зрения, что может быть и except end пустым (а это между прочим тема начальной беседы) и привел контректный пример.
А ты насколько я понял не прочитал всей темы, влез в середину разговора и пытаешься меня убедить в том, что я пишу всегда пустой except end.
Я готов с тобой продолжить диалог, если ты внимательно узучишь [137] и дашь конкретные замечания(на которые я постараюсь ответить).
Либо приведешь конр пример, соблюдая условия задачи, но тем не менее без пустого except end.
← →
Anatoly Podgoretsky © (2009-01-17 21:13) [154]> DVM (17.01.2009 20:19:14) [134]
Дэти запомните, понять это нельзя
Сол пишется с мягким знаком
а Ось - это полосатый мухь, без мягкого знака.
(с) Анекдот
← →
Anatoly Podgoretsky © (2009-01-17 21:19) [155]> vuk (17.01.2009 20:59:32) [152]
Вроде бы уже выяснили, что это ошибка данных, о которой надо сообщить и продолжить. Эта ошибка ни к каким последствиям не приводит.
← →
vuk © (2009-01-17 21:24) [156]to Anatoly Podgoretsky © (17.01.09 21:19) [155]:
>Вроде бы уже выяснили, что это ошибка данных, о которой надо сообщить
>и продолжить. Эта ошибка ни к каким последствиям не приводит.
Ну, вот мне тоже так казалось, но Игорь-то пишет о только двух категориях...
← →
oxffff © (2009-01-17 21:25) [157]
> Anatoly Podgoretsky © (17.01.09 21:19) [155]
Кому сообщить? В милицию?
Если весь лог идет через этот журнал только, который возвращает неизвестные исключения. Это исключение должно быть тихо съедено, чтобы продолжить работу приложения.
Или вы предлагаете на каждый лог еще лог. Таким образом повышая отказоустойчивость логирования, увеличивая количество вложенности логов.
Смотрите условие [137].
← →
Anatoly Podgoretsky © (2009-01-17 21:28) [158]> oxffff (17.01.2009 21:25:37) [157]
Касательно [155] мы уже обсудили кому сообщить и как.
← →
oxffff © (2009-01-17 21:30) [159]
> Anatoly Podgoretsky © (17.01.09 21:28) [158]
Ну так, что нам мешает вернуться к обсуждению [137].
← →
Игорь Шевченко © (2009-01-17 21:36) [160]vuk © (17.01.09 20:59) [152]
> А куда относится AV при форматировании сообщений системного
> журнала? Эта ошибка не может быть исправлена программистом
Как это не может быть исправлена программистом - может быть исправлена программистом. Например, вылавливанием этого AV, пардон, протоколированием его, и продолжением разбора следующей части.
Стандартная категория "ошибка в данных".
oxffff © (17.01.09 20:56) [150]
> А внешние ошибки воспринимать как данные - это заниматься
> самообманом.
Что такое "внешняя ошибка" по твоей терминологии ?
Страницы: 1 2 3 4 5 6 вся ветка
Форум: "Прочее";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.84 MB
Время: 0.067 c