Python 尝试/阻止被调用函数中的异常
我有一些在链中调用的函数,在这些函数上我需要引入try/except块来处理我正在使用的库中产生的异常 我试图理解这是否安全,更具体地说,如果我们总是可以预期try/except块在执行流中看不到更深的try/except块: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():
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中引发的任何异常都将由该块处理,并且不会向上传播调用堆栈。这里没有递归;这些函数中的任何一个都不调用自身。不过,对于递归调用,答案并不不同。我知道,我只是提供了一个嵌套级别的示例。所以返回异常只适用于递归调用?不,不管调用是递归调用还是非递归调用。