python - 在异常之后继续前进并在之后提升它

时间:2017-11-20 11:22:03

标签: python python-2.7 exception exception-handling try-catch

我认为这应该有点棘手,但在某种程度上可行,但我需要帮助。 我想在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()之后抛出异常。这样,我仍然会得到我的一个函数的结果,并且错误信息发生在另一个函数中。

2 个答案:

答案 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])(我只关心这种情况下的第一个让我们说)。