我的代码有效,但我认为我的理解存在问题,或者可能(喘气)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
是语法错误。
答案 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)