Форум: "Прочее";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизИспользование "пустых" try .. except Найти похожие ветки
← →
Anatoly Podgoretsky © (2006-12-09 13:30) [80]> Loginov Dmitry (09.12.2006 9:33:16) [76]
> Что мешает выполнить проверку существавания файла "default.m3u" перед загрузкой в ListBox1? Это гораздо лучше, чем необоснованное гашение исключений.
Наличие файла не спасает от исключения
← →
Anatoly Podgoretsky © (2006-12-09 13:31) [81]> Piter (09.12.2006 12:40:17) [77]
Убивать за подобное, лучше из рогатки.
← →
Юрий Зотов © (2006-12-09 13:45) [82]> Piter © (09.12.06 12:40) [77]
В ЭТОМ никакого смысла нет вообще.
А вот в ЭТОМ:if FileExist(FileName) then
ListBox1.Items.LoadFromFile(FileName);
смысл есть. Потому что если при чтении СУЩЕСТВУЮЩЕГО файла возникла ошибка, значит, что-то не так с этим файлом, с этим каталогом, с этим диском, с этой файловой системой, с этой Windows, с этой машиной и т.д. О чем юзера надо уведомить, а не прятать от него проблему.
Как видите, блок try-except в данном случае не только не требуется, но и даже вреден.
А если мы в этот пример вдумаемся, то увидим, что на самом деле это вовсе никакой не пример, а общий случай. Если в коде (на первый взгляд, вроде бы, даже и обоснованно) стоит пустой except, то это, как правило, означает, что проверку ситуации, которая ошибкой НЕ является надо сделать ДО выполнения данного куска, а try выкинуть совсем. Чтобы не маскировать им ошибки ДЕЙСТВИТЕЛЬНЫЕ.
Почему и говорят, что пустой except - плохой стиль. И это правильно.
← →
Anatoly Podgoretsky © (2006-12-09 13:50) [83]> sniknik (09.12.2006 13:27:18) [78]
except
ListBox1.Clear;
+ сообщение/логирование, почему не удалось загрузить
end;
В данном случае в сам ListBox1 можно и вывести сообщение об ошибке. Даже логирование не требуется.
← →
Piter © (2006-12-09 14:17) [84]sniknik © (09.12.06 13:27) [78]
ListBox1.Clear;
я знаю, что ListBox уже и так пустой. Нужна эта строчка?
sniknik © (09.12.06 13:27) [78]
+ сообщение/логирование, почему не удалось загрузить
ну нет в моей программе логирования. И не доказывайте, что в любой программе должно быть, это никак не привязано к except.
← →
Piter © (2006-12-09 14:22) [85]Юрий Зотов © (09.12.06 13:45) [82]
Потому что если при чтении СУЩЕСТВУЮЩЕГО файла возникла ошибка, значит, что-то не так с этим файлом, с этим каталогом, с этим диском, с этой файловой системой, с этой Windows, с этой машиной и т.д. О чем юзера надо уведомить
а почему именно к существованию вы прицепились? Файл может быть и заблокировак другой программой, тогда надо так:if FileExist(FileName) then
if PermissionRead(FileName) then
ListBox1.Items.LoadFromFile(FileName);
так? Продолжая логику, мы дойдем до того, обработаем САМИ все возможные ситуации возникновения исключений. Нафига это надо?
Если уж мы собрались выдавать сообщения о неудачной загрузке, то тогда уж просто:ListBox1.Items.LoadFromFile(FileName);
А если не собираемся ничего сообщать юзеру о неудачной загрузке, то:try
ListBox1.Items.LoadFromFile(FileName);
except;
end;
← →
Джо © (2006-12-09 14:25) [86]> [85] Piter © (09.12.06 14:22)
> А если не собираемся ничего сообщать юзеру о неудачной загрузке,
> то:
А это зря. Пользователи тоже встречаются упорные и любопытные — вот хотят они знать, почему их любовно составленный плейлист не грузится и все тут! :)
← →
Ega23 © (2006-12-09 14:27) [87]Ну, я как минимум всегда стараюсь такую конструкцию использовать:
procedure TMyClass.MyProc;
begin
......
try
........
except on E:Exception do
Log("TMyClass.MyProc->" + E.Message);
end;
.....
end;
Учитывая специфику объектов и их местонахождение, ездить на каждый чих - замучаешься. А вот лог-файл выслать - совсем другое дело.
← →
Юрий Зотов © (2006-12-09 14:30) [88]> А если не собираемся ничего сообщать юзеру о неудачной загрузке
Вот тут в соседней ветка пример на похожую тему. Человек запускает инсталлятор, тот стартует, а через секунду тихо умирает.
Так и тут - не грузится файл, и все. И никаких сообщений. И сиди, чеши репу. Хоть обчешись. Отличный стиль программирования, да?
← →
sniknik © (2006-12-09 14:34) [89]Piter © (09.12.06 14:17) [84]
> я знаю, что ListBox уже и так пустой. Нужна эта строчка?
откуда я знаю? это же твоя логика. но если ты "рубиш" глюки и если это действие делается юзером повторно то почему в нем не может быть частично (изза глюка) загруженного файла?
т.что скорее нужна чем нет.
> ну нет в моей программе логирования.
значит должно быть сообщение. я же там на выбор подставил.
почему не обратил внимание на последний абзац ([78])? конкретизация тебе неудобна? не будет темы, флуда, а будет разбор твоего кода...
> а почему именно к существованию вы прицепились?
потому что предположили, что именно это ты и "скрываешь" забывая о другом. логично. т.к. не описано.
← →
sniknik © (2006-12-09 14:40) [90]sniknik © (09.12.06 14:34) [89]
> потому что предположили, что именно это ты и "скрываешь" забывая о другом. логично. т.к. не описано.
сорри, описано... и похоже понято именно так как написано.
> [0] Я загружаю плейлист по-умолчанию, если допустим нет такого файла
← →
sniknik © (2006-12-09 14:45) [91]а если допустим есть, и я его 3 часа скурпулезно составлял, открываю... нет моих композиций, а файл есть... (???), но просто нет прав на его открытие (но я этого не увижу), а оно име молча пустой список.
хотя я в общем и сам буду виноват, не под тем юзером зашел, но -> программу в корзину, однозначно!
← →
Piter © (2006-12-09 15:47) [92]Юрий Зотов © (09.12.06 14:30) [88]
Так и тут - не грузится файл, и все. И никаких сообщений. И сиди, чеши репу. Хоть обчешись. Отличный стиль программирования, да?
а почему сообщения должны быть? Это не нарушает функционал программы. Вы запустили программу - у вас на экране плей-лист, который был при последней выгрузке программы.
А если файл удален - то ничего нету. И что - добавляйте вручную или как-то так. Этого файла мож и не должно быть. Операция не критична, это не нарушение коннекта к БД, без которой программа функционал теряет.
Удалось загрузить дефолтный файл-лист - хорошо. Не удалось - и фиг с ним.
sniknik © (09.12.06 14:45) [91]
хотя я в общем и сам буду виноват, не под тем юзером зашел, но -> программу в корзину, однозначно
мне даже интересно стало. У тебя WinAmp есть?
Насоставляй там плейлист, закрой программу. Удали этот временный файл-лист. При новой загрузке тебе WinAmp ошибку выдаст или просто пустой список?
← →
Piter © (2006-12-09 15:47) [93]у меня просто WinAmp"а сейчас нету.
← →
sniknik © (2006-12-09 16:12) [94]> у меня просто WinAmp"а сейчас нету.
аналогично, и не нужен он мне.
> Насоставляй там плейлист, закрой программу. Удали этот временный файл-лист. При новой загрузке тебе WinAmp ошибку
> выдаст или просто пустой список?
тебе вообщето про другое тут пытаются сказать, чего ты усиленно отказываешься понимать... судя по всему специально.
т.к. отсутствие файла это как раз предсказанное и логически обоснованное действие по нему... но, то что твоей идеологией удаляются и другие глюки, но это ты сознательно глаза закрываешь. иначе бы составил другой тест.
типа. -
Насоставляй там плейлист, закрой программу. сделай этот файл-лист нечитаемым (бреда туда внести в блокноте/поставить в доступ ему запрет на чтение/открыть другой программой эксклюзивно, неважно лиш бы открытие было ошибочным). При новой загрузке тебе WinAmp ошибку или просто пустой список?
вот это нужно проверять, а не просто отсутствие, которое ты ровняеш со всем что вообще возможно при открытии (хотя и говоришь в некоторых постах что нет, но действуешь как будто это равнозначно).
и кстати WinAmp это не показатель, что бы он там не выдал...
← →
Anatoly Podgoretsky © (2006-12-09 16:15) [95]> sniknik (09.12.2006 16:12:34) [94]
> чего ты усиленно отказываешься понимать... судя по всему специально.
Это не специально, у него старые проблемы с логикой.
← →
Piter © (2006-12-09 16:27) [96]sniknik © (09.12.06 16:12) [94]
заморочился, поставил WinAmp.
sniknik © (09.12.06 16:12) [94]
поставить в доступ ему запрет на чтение
ошибки не выдал
sniknik © (09.12.06 16:12) [94]
отсутствие файла
ошибки не выдал.
Единственная его реация - просто пустой плей-лист.
Собственно, я этого и ожидал.
Потому что загрузка плейлиста сохраненного перед выходом - это фича, но не приоритетный функционал. Смогли это сделать - замечательно. Не смогли - ну и фиг с ним, это не лишает плеера возможности работы.
WinAmp полностью оправдал мои надежды. Ну можно там со всякими FooBar поэкспериментировать, кому хочется.
Хотя естественно, всегда можно сказать:
sniknik © (09.12.06 16:12) [94]
и кстати WinAmp это не показатель, что бы он там не выдал...
а что, извините, показатель?
← →
Anatoly Podgoretsky © (2006-12-09 16:38) [97]> Piter (09.12.2006 16:27:36) [96]
> а что, извините, показатель?
Питер показатель.
← →
sniknik © (2006-12-09 16:44) [98]> поставить в доступ ему запрет на чтение
> ошибки не выдал
а блокнотом, при таком, его открывать выдает?
> а что, извините, показатель?
для своих програм, я, единственный и неповторимый показатель, и если я знаю что делая так, мне в случае чего после меньше проблем будет, то я так и сделаю.
WinAmp бесплатен? т.е. распространяется as is? если так то претензии пользователей не принимаются, ползуйся пока устраивает, а с меня в случае чего начальство взыщет...
← →
Piter © (2006-12-09 17:23) [99]sniknik © (09.12.06 16:44) [98]
а блокнотом, при таком, его открывать выдает?
а у блокнота показать файл ОСНОВНАЯ ФУНКЦИЯ. Ты меня обвиняешь в том, что я тебя не слушаю, а по-моему это ТЫ меня не слушаешь.
Понятное дело, что если программа не может выполнить свою ОСНОВНУЮ функцию - она пишет ошибку.
sniknik © (09.12.06 16:44) [98]
WinAmp бесплатен? т.е. распространяется as is? если так то претензии пользователей не принимаются, ползуйся пока устраивает, а с меня в случае чего начальство взыщет...
ох... Ну от тебя не ожидал, ну посмотри что ты пишешь, где логика?
не надо применять этот прием, когда ты как хочешь воспринимаешь мои слова и фразу "Иногда except можно оставлять пустым" ты преобразуешь в "except всегда можно оставлять пустым" - и начинаешь мне же доказывать неправомерность последней фразы.
Не надо этого делать. Я говорил, что иногда. И как правильно тут кто-то заметил - зависит от задачи.
А ты начал сруливать куда-то уже вообще в дебри, "а у меня начальство, а оно вот строгое, а туда сюда, а блокнот выдает ошибку, а вот винда тоже выдаст ошибку, если не сможет прочитать системный файл..." и прочее... Как это относится к теме?
← →
sniknik © (2006-12-09 18:31) [100]> а туда сюда, а блокнот выдает ошибку
вообщето я спросил только для того чтобы убедится что ты действительно запретил открытие, а не просто "ридонли" файлу поставил...
а ты тут таких выводов понаделал, страшно становится.
> И как правильно тут кто-то заметил - зависит от задачи.
я это и заметил (один из), в том абзаце который ты полностью проигнорировал. где говорил что надо это рассматривать только в "невырваным" из контекста.
p.s. а вообще ладно, хочется поспорить/подоказывать чегото, спорь, но без меня.
← →
MikePetrichenko © (2006-12-09 18:43) [101]
> Anatoly Podgoretsky © (08.12.06 21:36) [18]
> > MikePetrichenko (08.12.2006 21:24:10) [10]
>
> С какой стати преобразование 0 вызовет исключение? Он отлично
> преобразуется в дату без каких либо исключений.
Вот кусок из рекальной проги (Open и Next делается для IBQuery, который выше по коду):try
Open;
while not Eof do begin
FTask.Message.Files.AddObject(FieldByName("FILES_NAME").AsString, TObject(FieldByName("FILES_ID").AsInteger));
Next;
end;
except
end;
Этот кусок кода выполняется в потоке. Мне абсолюно параллельно что там происходит. Вывалился, не вывалился, создался поток, е создался. И т. п.
Главное - поток должен работать и умереть по конкретным причинам. Дальнейшее испольнение программы никак не зависит от того будет здесь исключение или нет.
И логи мне тут нафиг не нужны.
← →
Leonid Troyanovsky © (2006-12-09 19:51) [102]
> MikePetrichenko © (09.12.06 18:43) [101]
> Этот кусок кода выполняется в потоке. Мне абсолюно параллельно
> что там происходит.
- Вам действительно все пофигу?
- Все пофиг.
- Ну, а деньги?
- Не, деньги нам не пофиг.
- Дык, это ж непоследовательно(нелогично).
- А это нам пофиг.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-12-09 19:57) [103]
> Piter © (09.12.06 17:23) [99]
> Не надо этого делать. Я говорил, что иногда.
Этого достаточно.
Правильно же говорить - никогда.
Без всяких зависимостей и ограничений.
Все остальное - заблуждения.
--
Regards, LVT.
← →
GrayFace © (2006-12-09 19:59) [104]Я использую пустой try..except, например, при загрузке файла языка. Делается это в Form1Create. Если файла Language.txt в катклоге проги нет, то все по умолчанию на английском.
В случае с default.m3u я бы выдал ошибку, т.к. если файл заблокирован, то при закрытии проги плейлист не сохранится, об этом лучше предупреждать заранее.
> MikePetrichenko, код ничего не говорит. Почему параллельно?
← →
sniknik © (2006-12-09 20:00) [105]> Вот кусок из рекальной проги (Open и Next делается для IBQuery, который выше по коду):
вот это "ближе к телу", но недостаточно, придется домысливать...
> Дальнейшее испольнение программы никак не зависит от того будет здесь исключение или нет.
если не зависит то сделай этот кусок завершенным, закрывай запрос после действий переноса, если не закрыл то предполагается используешь его дальше, а значит не настолько и пофиг.
и слишком долгая адресация (FTask.Message.Files), Files понятно типа TStrings (судя по AddObject с вполне определенными параметрами) Message это уже чтото свое (не помню такого обьекта со свойством Files типа TStrings/стринглист), а вот FTask это уже получается либо форма либо другой поток (к себе адресация не была бы такой длинной...). ну а если это так то... не упомянутая/не показанная синхронизация в потоке означает ее отсутствие. тогда понятно зачем тут этот пустой блок. валилось небось изредка от неизвестных причин? да?
а вообще если действительно "абсолютно параллельно что там происходит" то вообще выкини этот кусок из программы, сэкономь ресурсы, ускорь поток!
зачем делать чтото абсолютно ненужное?
← →
Leonid Troyanovsky © (2006-12-09 20:04) [106]
> MikePetrichenko © (09.12.06 18:43) [101]
> Вот кусок из рекальной
Неаппетитно какой-то.
--
Regards, LVT.
← →
MikePetrichenko © (2006-12-09 22:20) [107]
> - Вам действительно все пофигу?
> - Все пофиг.
> - Ну, а деньги?
> - Не, деньги нам не пофиг.
> - Дык, это ж непоследовательно(нелогично).
> - А это нам пофиг.
>
> --
> Regards, LVT.
Это к чему? Или только что-бы что-то написать? Где у меня "все пофиг"?
> Неаппетитно какой-то.
Все тут пишут без опечаток?
Мдя... Народи лишьбы засветиться. По сему дискуссия бессмыслена
← →
MikePetrichenko © (2006-12-09 22:23) [108]
> sniknik © (09.12.06 20:00) [105]
Идиот?
← →
Суслик © (2006-12-10 13:54) [109]сам иногда пишу пиустые except"ы.
но готов признать, что это от лени.
← →
Palladin © (2006-12-11 20:05) [110]
> [56] Gero ©
довольно часто
2All
зачем путать:
1. дисциплину кодирования и осознование происходящего - оно вполне уживается вместе при знании дела
2. теорию и практику - в теории даже присвоение значения переменной нужно ставить под try... онож теория... недавно мой знакомый проводил опрос: кто нибудь обрабатывает ошибку нехватки памяти при ее захвате? все - нет. LVT конечно же каждый getmem и new блюдет и потом рассказывает пользователю, зачем и сколько ему понадобилось памяти и советует ему закрыть программы либо прикупить еще модулей... ага... хотелось бы в это верить, я думаю так оно и есть, по его возмущениям пустых обработчиков исключений...
← →
MikePetrichenko © (2006-12-11 20:19) [111]
> довольно часто
>
> 2All
> зачем путать:
> 1. дисциплину кодирования и осознование происходящего -
> оно вполне уживается вместе при знании дела
> 2. теорию и практику - в теории даже присвоение значения
> переменной нужно ставить под try... онож теория... недавно
> мой знакомый проводил опрос: кто нибудь обрабатывает ошибку
> нехватки памяти при ее захвате? все - нет. LVT конечно же
> каждый getmem и new блюдет и потом рассказывает пользователю,
> зачем и сколько ему понадобилось памяти и советует ему
> закрыть программы либо прикупить еще модулей... ага... хотелось
> бы в это верить, я думаю так оно и есть, по его возмущениям
> пустых обработчиков исключений...
А вот это поддерживаю. Во всем стоит знать меру. Да и вопрос целесообразности...
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.69 MB
Время: 0.045 c