Как сообщить об исключении на потом

У меня есть файл Python, в котором у меня есть две функции, каждая из которых вызывает исключение.

def f():
    raise e1

def g():
    raise e2

Мой вопрос, возможно ли сохранить эти исключения в переменной, например, в списке -[e1, e2]- для того, чтобы контролировать порядок выполнения исключений в другой функции, скажем, h?

2 ответа

Решение

Исключением являются объекты, как и большинство вещей в Python; в частности, вы можете привязать его к имени, когда поймаете его, а затем добавить его в список. Например:

exceptions = []
try:
    f()
except Exception as f_exc:
    exceptions.append(f_exc)

try:
    g()
except Exception as g_exc:
    exceptions.append(g_exc)

Я не уверен, какой вариант использования вы имеете в виду, что вы хотите сохранить исключения, чтобы рассмотреть их позже. Как правило, вы действуете на исключение, как только вы его поймаете.

Как отметил Чепнер, исключения являются объектами. Если позже вы захотите обрабатывать их в том же порядке (возможно, даже в другом потоке), вы должны сохранить их в очереди:

import Queue

exceptions = Queue.Queue()

try:
    f()
except Exception as e:
    exceptions.put(e)

Вы могли бы тогда иметь другой поток, обращающийся к той же самой переменной exceptions и обработать (или записать) их:

while True:
    while not exceptions.empty():
        do_sth_with_exception(exceptions.get())
Другие вопросы по тегам