#python #exception #coding-style
#python #исключение #стиль кодирования
Вопрос:
Мой случай прямо сейчас:
try:
try:
condition
catch
try:
condition
catch
catch
major failure
Плохо ли иметь такой код? Это слишком сильно загромождает или каковы последствия чего-то подобного?
Ответ №1:
Нет, это довольно распространенное явление (за исключением того, что ключевое слово except
вместо catch
). Это зависит от того, что вам нужно сделать, и дизайна.
Что плохо, что я вижу слишком много, так это перехват Exception
класса верхнего уровня, а не чего-то более конкретного (например, KeyError). Или создание того же самого.
Комментарии:
1. Очень верно … это except, а не catch. Мой плохой. Сейчас я перехватываю класс Exception, но я расширю его позже, когда у меня будет определено больше материала, так что, вероятно, это даст мне лучший контроль, и в такого рода структуре не будет необходимости. Спасибо за объяснение, высоко ценится.
Ответ №2:
Я бы не стал просто выносить вердикт и утверждать «это плохо», потому что иногда вам это может понадобиться. Python иногда намеренно генерирует исключения вместо того, чтобы позволить вам спросить (делает ли это …?) [девиз EAFP], и в некоторых случаях вложение try/catch
полезно — когда это имеет смысл при логическом течении кода.
Но я предполагаю, что в большинстве случаев вы этого не делаете. Итак, лучшим вопросом в вашем случае было бы представить конкретный вариант использования, в котором, по вашему мнению, вам нужен такой код.
Комментарии:
1. Я согласен с этим. Я сам время от времени использую вложенные исключения, и это не «изначально» плохо. Иногда это может даже улучшить читаемость вашего кода…
2. Прямо сейчас это единственный способ отловить некоторые ошибки в средних операторах … если какая-либо из них завершается неудачей, все остальные становятся бесполезными, и оператор top также становится бесполезным, потому что мне нужно, чтобы все они были выполнены, чтобы выполнить самый верхний оператор. (Т.е. Передать параметры методу класса, который отправит данные во внешний API [Контакты Google]). Спасибо! 🙂
3. @Jorge: Если вы просто тестируете пару условий, то оператор if / else, по-видимому, лучше подходит. Возможно, вы используете try / except здесь как скрытый оператор goto. Если вы опубликуете более подробный код, вы получите более конкретные ответы!