在python3程序中,我有一个try...except
块,我将某个方法中出现的异常存储到已发生的list
个异常中。简化版本如下所示:
def the_method(iterable):
errors = []
for i in iterable:
try:
something(i)
except Exception as e:
errors.append(e)
return errors
后,方法返回我想在控制台中打印错误。如何使用traceback和通常的未捕获的异常格式打印异常?
答案 0 :(得分:4)
使用traceback
模块。请注意,界面很古老,因此不知道使用type(exc)
和exc.__traceback__
;你必须自己解决这些问题:
for exc in errors:
traceback.print_exception(type(exc), exc, exc.__traceback__)
答案 1 :(得分:0)
是否可以使用print
命令,例如
def the_method(iterable):
errors = []
for i in iterable:
try:
something(i)
except Exception as e:
errors.append(e)
return errors
err = the_method(iterable)
for e in err:
print e()
答案 2 :(得分:0)
异常具有属性,就像Python中的其他对象一样。您可能想要探索异常的属性。请考虑以下示例:
>>> try:
import some_junk_that_doesnt_exist
except Exception as error:
print(dir(error))
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', '_not_found', 'args', 'msg', 'name', 'path', 'with_traceback']
这意味着对于列表中的每个异常,您都可以访问异常的属性。因此,您可以执行以下操作:
for e in err:
print(e.args)
print(e.name)
print(e.msg)
但是,我发生的一件事是,以下行不应该在错误列表中附加多个例外:
except Exception as e:
errors.append(e)
其他人会比我更了解,但不是Exception 总是在这里是一件事(除非你捕获了多个特定的例外)?