7

在 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

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

4

3 回答 3

11

使用traceback模块。请注意,接口是古老的,所以它不知道使用type(exc)and exc.__traceback__; 你必须自己提取那些:

for exc in errors:
    traceback.print_exception(type(exc), exc, exc.__traceback__)
于 2013-09-06T17:31:57.593 回答
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()
于 2013-09-06T17:12:55.630 回答
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)

其他人会比我更了解,但这里的异常不总是一回事(除非您要捕获多个特定异常)?

于 2013-09-06T17:21:31.220 回答