Python 存储和打印带有回溯的异常?

Python 存储和打印带有回溯的异常?,python,python-3.x,Python,Python 3.x,在python3程序中,我有一个特定的try…except块,在该块中,我将在某个方法中发生的异常存储到已发生异常的列表中。简化版本如下所示: def the_method(iterable): errors = [] for i in iterable: try: something(i) except Exception as e: errors.append(e) return errors 在

在python3程序中,我有一个特定的
try…except
块,在该块中,我将在某个方法中发生的异常存储到已发生异常的
列表中。简化版本如下所示:

def the_method(iterable):
   errors = []
   for i in iterable:
       try:
           something(i)
        except Exception as e:
            errors.append(e)
   return errors

方法返回后,我想在控制台中打印错误。如何使用回溯和通常未捕获的异常格式打印异常?

是否使用
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()

异常具有属性,就像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)
其他人会比我更清楚,但异常不总是一回事吗(除非您捕获多个特定异常)?

使用该模块。请注意,该接口非常古老,因此它不知道如何使用
type(exc)
exc.uu回溯uu
;您必须自己提取这些信息:

for exc in errors:
    traceback.print_exception(type(exc), exc, exc.__traceback__)

不,它只打印异常的第一部分。它不像打印未捕获的异常那样打印异常类型或回溯。公平地说,它确实以这种方式打印异常,只是打印的异常不是
e
。好的。。。但是如何打印带有回溯的异常,就像打印未捕获的异常一样?
e.with_traceback
是一种方法。它设置了回溯。听起来你还想要一些。您可能需要
sys.exc\u info()
。看看这里的例子:啊。我从来没有用过追踪。我只使用过
.msg
来处理它们。为了避免混淆,我删除了它。这似乎正是我想要的!