如何报告异常以备后用
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())
我有一个 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())