Як зафіксувати кілька винятків в одному рядку (крім блоку)
Зробити це:
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.