Как перехватить несколько исключений в одной строке (кроме блока)
Сделайте это:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Скобки требуются из-за более старого использованного синтаксисазапятые, чтобы присвоить объекту ошибки имя.Ключевое слово as
используется для назначения.Вы можете использовать любое имя для объекта ошибки, я предпочитаю error
лично.
Наилучшая практика
Чтобы сделать это способом, совместимым с Python в настоящее время и в будущем, вам необходимо отделить исключенияс запятыми и заключите их в круглые скобки, чтобы отличить их от более раннего синтаксиса, который назначал экземпляр исключения для имени переменной, следуя типу исключения, который должен быть пойман с запятой.
Вот пример простого использования:
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
quit(0)
Я указываю только эти исключения, чтобы избежать сокрытия ошибок, которые, если я сталкиваюсь, ожидают полную трассировку стека от.
Это задокументировано здесь: https://docs.python.org/tutorial/errors.html
Вы можете назначить исключение переменной (e
является обычным, но вы можете предпочесть более подробную переменную, если у вас длинная обработка исключений или только ваша IDE)выделяет выделение больше этого, как у меня.) Экземпляр имеет атрибут args.Вот пример:
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
quit(0)
Обратите внимание, что в Python 3 объект err
выходит из области видимости, когда завершается блок except
.
Устаревший
Вы можете увидеть код, который присваивает ошибку с запятой.Это использование, единственная форма, доступная в Python 2.5 и более ранних версиях, устарело, и если вы хотите, чтобы ваш код был напрямую совместим в Python 3, вы должны обновить синтаксис для использования новой формы:
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
quit(0)
Если вы видите назначение запятой в своей кодовой базе и используете Python 2.5 или выше, переключитесь на новый способ, чтобы ваш код оставался совместимым при обновлении.
Менеджер контекста suppress
Принятый ответ - это действительно 4 строки кода, минимум:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
Строки try
, except
, pass
могут обрабатываться в одну строку с помощью подавление диспетчера контекста, доступно в Python 3.4 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
Поэтому, если вы хотите pass
для определенных исключений, используйте suppress
.