尝试/阻止被调用函数中的异常

时间:2017-05-10 16:28:56

标签: python recursion exception-handling

我有一些在链中调用的函数,我需要在其中引入try / except块来处理我正在使用的库中出现的异常。

我试图理解这是否安全,更具体地说,如果我们总能指望try / except块在执行流程中看不到更深的try / except块:

def level_two_function():

    try:
        return a[i]
    except:
        return "Exception at level 2"

def level_one_function():

    try:
        return level_two_function()
    except:
        return "Exception at level 1"

level_one_function() # 'Exception at level 2'

level_one_function的try / except块在任何情况下都会看到level_two_function引发的任何异常吗?

与以下情况相比,行为如何?

def work(token, restrictions):

    def loop(token):
        if token.text in restrictions:
            try:
                return loop(token.nbor())
            except IndexError:
                return token
        else:
            return token

    try:
        start = token.nbor()
        return loop(start)
    except IndexError:
        #  if it has no neighbor just return it
        return token

1 个答案:

答案 0 :(得分:1)

如果level_one_function()行中出现异常,您的level_two_function仍然可以看到return "Exception at level 2"期间引发的异常。

如果内存不足或发送了键盘中断,该行可能会引发异常。

但是,try:..except level_two_function()块中引发的任何异常都将由该块处理,并且不会在调用堆栈中向上传播。