我认为这应该有点棘手,但在某种程度上可行,但我需要帮助。 我想在main()函数中执行两个函数。 我希望能够分别从两者中捕获异常,但如果另一个引发异常,仍然能够执行两者并获得至少其中一个的结果。
我们说我有:
def foo():
raise TypeError
def bar():
return 'bar'
如果我这样做(改编自here):
def multiple_exceptions(flist):
for f in flist:
try:
return f()
except:
continue
def main():
multiple_exceptions([foo, bar])
main()
main()
会返回'bar'
,但我仍然希望能够在foo()
之后抛出异常。这样,我仍然会得到我的一个函数的结果,并且错误信息发生在另一个函数中。
答案 0 :(得分:1)
您可以使用“as”捕获和存储异常,例如:
try:
raise Exception('I am an error!')
print('The poster messed up error-handling code here.') #should not be displayed
except Exception as Somename:
print(Somename.message)
# you'll see the error message displayed as a normal print result;
# you could do print(stuff, file=sys.stderr) to print it like an error without aborting
print('Code here still works, the function did not abort despite the error above')
...or you can do:
except Exception as Somename:
do_stuff()
raise Somename
答案 1 :(得分:0)
感谢您的评论。 我解决了这个问题:
def multiple_exceptions(flist):
exceptions = []
for f in flist:
try:
f()
except Exception as e:
exceptions.append(e.message)
continue
return exceptions
def main():
multiple_exceptions([foo, bar])
error_messages = main() # list of e.messages occurred (to be raised whenever I want)
然后我可以提出例外情况,例如raise Exception(error_messages[0])
(我只关心这种情况下的第一个让我们说)。