Как я могу написать try
/ except
блок, который перехватывает все исключения?
python
exception-handling
user469652
источник
источник
sys.stderr
и, возможно, регистрируются. Это вполне допустимое и распространенное исключение.try: whatever() except Exception as e: exp_capture()
:?Ответы:
Вы можете, но, вероятно, не должны:
Тем не менее, это также будет ловить исключения, как,
KeyboardInterrupt
и вы обычно не хотите этого, не так ли? Если вы повторно не вызвали исключение сразу - посмотрите следующий пример из документации :источник
except Exception:
что «голое», за исключением того, что у вас есть, также поймает BaseException.Помимо
except:
простого предложения (которое, как говорили другие, не следует использовать), вы можете просто уловитьException
:Обычно вы всегда рассматриваете возможность сделать это на самом внешнем уровне вашего кода, если, например, вы хотите обработать любые иные необработанные исключения перед завершением.
Преимущество
except Exception
над голымexcept
состоит в том, что есть несколько исключений, которые он не поймает, наиболее очевидноKeyboardInterrupt
иSystemExit
: если вы поймали и проглотили их, вы могли бы затруднить кому-либо выход из сценария.источник
Exception
. Обратите внимание, что невозможно вызватьint
исключение, и при попытке сделать это возникаетTypeError
исключение, котороеexcept Exception
в таком случае будет включено вмещающее предложение. С другой стороны, класс старого стиля может быть поднят и квалифицируется как «не-исключение» , который не подклассException
- это будет пойман на голомexcept
пункт , но не с помощьюexcept Exception
пункта.TypeError
sys.exit()
обычно означает, что вы ожидаете, что приложение завершит работу, но если вы поймаете SystemExit, оно не будет. Аналогично, если вы нажмете control-C на работающем скрипте (Ctrl-break на окнах), вы ожидаете, что программа остановится, чтобы не перехватить ошибку и продолжить работу. Но вы можете поймать любой / оба из них, если вы хотите сделать очистку перед существующим.Вы можете сделать это для обработки общих исключений
источник
Чтобы поймать все возможные исключения, поймать
BaseException
. Это на вершине иерархии исключений:Python 3: https://docs.python.org/3.5/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
Но, как упоминали другие люди, это обычно не требуется, только для особых случаев.
источник
Очень простой пример, похожий на найденный здесь:
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
Если вы пытаетесь перехватить ВСЕ исключения, поместите весь свой код в оператор «try:» вместо «print» Выполнение действия, которое может вызвать исключение. ».
В приведенном выше примере вы увидите вывод в следующем порядке:
1) Выполнение действия, которое может вызвать исключение.
2) И, наконец, вызывается непосредственно после выполнения оператора try независимо от того, было ли выброшено исключение.
3) «Исключение было брошено!» или "Все выглядит отлично!" в зависимости от того, было ли выброшено исключение.
Надеюсь это поможет!
источник
Есть несколько способов сделать это, в частности, с Python 3.0 и выше
Подход 1
Это простой подход, но он не рекомендуется, потому что вы не знаете точно, какая строка кода вызывает исключение:
Подход 2
Этот подход рекомендуется, потому что он предоставляет более подробную информацию о каждом исключении. Это включает в себя:
Единственным недостатком является необходимость импорта tracback.
источник
Я только что обнаружил этот маленький трюк для проверки имен исключений в Python 2.7. Иногда я обрабатывал определенные исключения в коде, поэтому мне нужно было проверить, находится ли это имя в списке обработанных исключений.
источник
Стоит отметить, что это неправильное кодирование Python. Это также поймает много ошибок, которые вы можете не захотеть поймать.
источник