raise *错误在Python 2.7中不起作用;如何提出先前捕获的异常?

时间:2016-08-03 07:20:38

标签: python python-2.7 syntax exception-handling

我的代码有效,但我认为我的理解存在问题,或者可能(喘气)Python raise行为中的错误。

我正在循环一组参数。我捕获第一个错误,并希望在完成循环后使用“Inner exception” (with traceback) in Python?

中描述的原始追溯等来提高它

我显然希望循环处理所有参数,然后告诉我出了什么问题。

error = None
for arg in arguments:
    try:
        process(arg)
    except ValueError, err:
        if not error:
            error = sys.exc_info()
if error:
    raise error[0], error[1], error[2]

最后一行是有问题的一行。它的工作原理(演示:http://ideone.com/HFZETm - 注意它是如何从第一个错误打印回溯,而不是最后一个错误,但它看起来非常笨重。我怎么能更简洁地表达呢?

raise error似乎更优雅,但它的行为就好像我只有raise error[0](或者可能会提升error[1])。 raise *error是语法错误。

1 个答案:

答案 0 :(得分:1)

也许,你可以这样做:

for arg in arguments:
    try:
        process(arg)
    except ValueError:
        raise

另外,如果你要多次这样做,你可以将它包装在一个函数中:

def raise_error(err):
    raise err[0], err[1]. err[2]

error = None
for arg in arguments:
    try:
        process(arg)
    except ValueError, err:
        if not error:
            error = sys.exc_info()
if error:
    raise_error(error)