Як зафіксувати кілька винятків в одному рядку (крім блоку)
Зробити це:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
Дужки потрібні через старіший синтаксис, який використовував коми для призначення об’єкта помилки імені. as
Ключове слово використовується для завдання. Ви можете використовувати будь-яке ім'я для об’єкта помилки, я вважаю за краще error
особисто.
Найкраща практика
Для цього в даний час і вперед сумісний з Python, вам потрібно відокремити Винятки комами та обернути їх дужками, щоб відмежовуватися від попереднього синтаксису, який призначив екземпляр винятку імені змінної, слідуючи типу Виняток, який повинен бути спійманий з кома
Ось приклад простого використання:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
Я вказую лише ці винятки, щоб уникнути приховування помилок, які, якщо я зустрінусь, я очікую від повного сліду стека.
Це задокументовано тут: https://docs.python.org/tutorial/errors.html
Ви можете вилучити виняток змінній ( e
є загальною, але ви можете віддати перевагу більш багатослівній змінній, якщо у вас є обробка довгими винятками або ваш IDE виділяє лише виділення, більші, ніж це, як у мене.) Екземпляр має атрибут args. Ось приклад:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Зауважте, що в Python 3, err
об'єкт виходить із сфери застосування, коли except
блок укладається.
Застарілий
Можливо, ви побачите код, який призначає помилку комою. Це використання, єдина форма, доступна в Python 2.5 і новіших версіях, застаріла, і якщо ви хочете, щоб ваш код був сумісний вперед в Python 3, слід оновити синтаксис, щоб використовувати нову форму:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
Якщо ви бачите присвоєння імені комах у вашій кодовій базі, а ви використовуєте Python 2.5 або новішої версії, перейдіть на новий спосіб зробити це, щоб ваш код залишався сумісним під час оновлення.
The 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
.