raise *错误在Python 2.7中不起作用; 我怎样才能提出先前捕获的异常?

raise *error doesn't work in Python 2.7; how can I raise a previously captured exception?

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

我正在循环一组参数。 我捕获了第一个错误,并希望在完成循环后使用Python中的"内部异常"(带回溯)中描述的原始回溯等来提高它?

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

1
2
3
4
5
6
7
8
9
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
2
3
4
5
for arg in arguments:
    try:
        process(arg)
    except ValueError:
        raise

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

1
2
3
4
5
6
7
8
9
10
11
12
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)