Ну мне приходилось городить try..except в python. Только это требовалось для выполнения каких-то банальных вещей, где язык тебе вставлял палки в колёса. Быстрее решение чем пустой except, просто не придумать, как по мне.
Я не пишу больших проектов, разве что-то больше лабы.
Ситуативно. Иногда нам пофигу какой именно эксепшн прилетит и тогда, мы либо вообще другую ветку кода запустим, либо напишем общее сообщение, что юзер дурак и пытается сделать какую-то фигню.
Ну и это, ты для начала все системные эксепшены своего ЯП перечисли (а потом со стандартом сравни и посчитай сколько ты не вспомнил) и сразу всё поймешь.
У нас сразу увольняют. Только не их, а тупорылых догматиков которые услышали от кого-то что А - плохо, и с тех пор это повторяют как попугаи не включая голову. Много где пустой except - абсолютно валидный кейс.
А что там должно быть по-твоему? Я обычно так делаю, чтобы код выполнялся после некритичной ошибки. Это как soft assert. Только вставляю вывод в консоль для дебага.
Совершенно нормальная практика оборачивать в пустой except вызов внешнего обработчика события. Потому что неизвестно, что там за говнокод наляпан уровнем выше, пусть его автор разбирается, а моему классу нужно продолжать работу без разрушения всего стека вызовов.
Смотри у нас на одной из прошлых работ был спор с Девопсом. Я говорил ПРОГА в непредсказуемой ситуации должна упасть. А он говорил, нет надо продолжить работу написав в лог.
Вот представь: Банковское ПО. Ошибка в расчете процента за услугу. Ты шлешь миллион. Клиент должен получить миллион - процент. А он получает миллион. Как думаешь начальство обрадуется если это обнаружится через год? ВСЕГДА ты должен указать КАКИЕ ты ловишь ошибки. Да ты не обработаешь нехватку памяти и нехватку места на диске - падай.
Это ты сейчас придумал. В посте ТС ничего нет про деньги. Может там картинка на монитор выводится, и от того, что b неинициализирована, будет один черный пиксель.
Вы оба правы по-своему. Когда прога работает через API, может быть куча вариантов, когда приходит нестандартный ответ. Обработка этого должна быть, но бывает, что API плохо документирован или вообще чужой. И что клиенту блочить весь функционал, теряя бабло, пока там чьи-то индусы в носу будут ковырять? На критичные фичи, особенно с баблом, должны быть тесты, минимум юнит, по хорошему e2e.
У меня в виме try стоит на установку темы, если темы нет оно не ругается доставучим окошком. Вернее стояло, сейчас убрал ибо там сломали Eблаблячётотам код ошибки и ругалось уже доставучим окошком что нет такого кода ошибки :D
Всё зависит от бюджета проекта. Если бюджет предполагает тестирование и хоть какую-то поддержку, то это дело конечно проверяется и тестируется, иногда даже нагрузочными тестами. Если бюджет как часто бывает у нас сейчас со всякими гос организациями - выделили часть, остальную пообещали, а в процессе ещё навалили кучу задач мимо ТЗ, то нихрена не проверяется, делается как можно быстрее и уже в процессе эксплуатации что-то правится и то, если за это платят или сильно кричат.
В общем добро пожаловать в AGILE и прочие методологии. Все россказни про качество, кучу тестов и прочую хрень это всё для лохов и развода, а на практике нихрена не тестируется, нихрена не отлавливается и такое дерьмо пускают в продакшин, что даже на локалхост то стыдно такое ставить. И это я не только за наших заказчиков говорю, это в том числе речь про тех, с кем приходится взаимодействовать, а там и крупные бренды есть. Век говнокода.
PS: выдохнул, всё таки пятница утро и опять кучи говна разгребать:)
Если бюджет как часто бывает у нас сейчас со всякими гос организациями
это так везде, и у коммерсов тоже
В общем добро пожаловать в AGILE и прочие методологии.
Agile то тут вобщем не причем. Такой код, как у ТС, по-хорошему, зарубится на этапе ревью как содержащий пустой блок. Это даже можно в кодинг стайл прописать, типа «пустые блоки не разрешаются, за исключением тех случаев, когда без них невозможно, например, определение конструктора с инициализаторами». Самое сложное - проверить, что эксепшн может быть кинут из того или иного вызова. Не знаю, как там в компиляторе Паскаля с этим обстоит, но тут кодер уже сделал за ревьюера всю работу, указав, что таки эксепшн кидается. Не ну реально, если ревью пропускает такой код без комментариев и обеспокоенностей, то нечего на Agile пенять, коль программисты дебилы.
Качество ревью зависит от бюджета проекта и как следствие от тех, кто назначен делать ревью и тех, кто пишет код. Вроде бы как AGILE и не причём, но AGILE появился как раз для ускорения процесса разработки с точки зрения покупателя. Ускорить же процесс разработки нельзя, попутно не поломав ничего. Всегда приходится чем-то жертвовать. Если в идеале, предполагается, что каждые там неделю-две-месяц должен быть прирост фич и они должны работать, как планировалось, то в реальности часто заказчики хотят это ещё и почти даром, и быстрее ну и как следствие приходится жертвовать много чем. Доходит до того, что тот кто делает ревью может быть узбеком, а тот кто пишет код, вообще марсианен. При том про узбека я не пошутил. И это не камень в огород узбеков, в данном случае я это упомянул потому, что они иногда ещё дешевле, чем русские из какой-нибудь жопы.
Но еще раз, аджайл тут не причем. Нет такого пункта в аджайл «экономить любой ценой», и даже, ЕМНИП не утверждается, что суммарные затраты на проект будут ниже суммарных затрат при традиционной методологии.
Ну да, конечно. Я не отрицаю что я не профессиональный программер, но когда при переполнении итератора в while..do начинаються IndexError-ы, и решить это можно только try..except, то некуда деваться. Почему бы сразу не пропускать цикл, а не выводить мне ошибку и аварийно завершать программу?! Это самое банальное что я вспомнил когда писал.
Совершенно нормальная практика оборачивать в пустой except вызов внешнего обработчика события. Потому что неизвестно, что там за говнокод наляпан уровнем выше, пусть его автор разбирается, а моему классу нужно продолжать работу без разрушения всего стека вызовов.
И когда продукт внезапно станет вести себя совершенно непонятным образом, кому-то придётся блуждать по всем уровням говнокода.
несмотря на вышенаписанное, иногда сама используемая либа написана криво и exception кидается когда он нахрен не упёрся: например, так делает substr() в STL
в таких случаях, пустой обработчик exception писать можно и нужно
Потому что неизвестно, что там за говнокод наляпан уровнем выше, пусть его автор разбирается, а моему классу нужно продолжать работу без разрушения всего стека вызовов.
А автор уровнем выше уровнем выше думает так же, и оборачивает в пустой except сообщения об ошибках от твоего кода. А пользователь видит как у классика: «А включаешь — не работает.»
А что там должно быть по-твоему? Я обычно так делаю, чтобы код выполнялся после некритичной ошибки. Это как soft assert. Только вставляю вывод в консоль для дебага.
А куда вставляешь этот вывод в консоль? В except? Или оставляешь except пустым, а в консоль пишешь всегда? В примере except пустой :)