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

Python 尝试/阻止被调用函数中的异常,python,recursion,exception-handling,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/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\u one\u函数的try/except块
在任何情况下都会看到由
level\u two\u函数
引发的异常吗

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

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

如果在
return“exception at level 2”
行中引发异常,则您的
level\u one\u函数()
仍然可以看到在
level\u two\u函数期间引发的异常

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


但是,在
try:…除了
level\u two\u function()
块之外,在
try中引发的任何异常都将由该块处理,并且不会向上传播调用堆栈。

这里没有递归;这些函数中的任何一个都不调用自身。不过,对于递归调用,答案并不不同。我知道,我只是提供了一个嵌套级别的示例。所以返回异常只适用于递归调用?不,不管调用是递归调用还是非递归调用。