raise *error doesn't work in Python 2.7; how can I raise a previously captured exception?
我的代码有效,但我认为我的理解存在问题,或者可能(喘气)Python的
我正在循环一组参数。 我捕获了第一个错误,并希望在完成循环后使用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 - 注意它是如何从第一个错误打印回溯,而不是最后一个错误),但它看起来非常笨重。 我怎么能更简洁地表达一下呢?
也许,你可以这样做:
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) |