Я думаю, вы также можете проверить типы исключений.Однако я не знаю, является ли это наиболее питоническим способом:
РЕДАКТИРОВАТЬ: Глядя на документацию, кажется, что не самый питонический способ.Как вы справляетесь с различными типами исключений внутри вашей функции handle_all_exceptions()
зависит от вас. См. Документ.
try:
do_something_dangerous()
except Exception as e:
handle_all_exceptions(e)
def handle_all_exceptions(e):
if isinstance(e, Exception1):
handle_exception1()
elif isinstance(e, Exception2):
handle_exception2()
Поскольку вы не хотите проверять экземпляры или подобие, вот еще один возможный способ реализации.Хотя реализация списка определенно не подходит, она решает проблему без вложенных операторов try.Вы также можете использовать логические операторы или аналогичные, однако со списком у вас все еще есть доступ к объекту ошибки для дальнейшей обработки.
ex = []
try:
do_something_dangerous()
except Exception1 as e:
ex.append(e)
handle_exception1()
except Exception2 as e:
ex.append(e)
handle_exception2()
finally:
if ex: handle_all_exceptions(ex)