我有一些在链中调用的函数,我需要在其中引入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
答案 0 :(得分:1)
如果level_one_function()
行中出现异常,您的level_two_function
仍然可以看到return "Exception at level 2"
期间引发的异常。
如果内存不足或发送了键盘中断,该行可能会引发异常。
但是,try:..except
level_two_function()
块中引发的任何异常都将由该块处理,并且不会在调用堆栈中向上传播。