如何报告异常以备后用

How to report an exception for later

我有一个 python 文件,其中有两个函数,每个函数都会引发异常。

def f():
    raise e1

def g():
    raise e2

我的问题是,是否可以将这些异常存储在一个变量中,例如列表--[e1, e2]--,以便控制另一个函数中异常执行的顺序,比如 h?

异常是对象,就像 Python 中的大多数事物一样;具体来说,您可以在捕获时将一个绑定到一个名称,然后将其添加到列表中。例如:

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

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

我不确定您想要存储异常以供日后查看的用例。通常,您会在捕获到异常后立即对其进行处理。

正如 chepner 所指出的,异常是对象。如果你以后想以相同的顺序处理它们(甚至可能是不同的线程),你应该将它们存储在一个队列中:

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())