Python 使用两个函数引发异常未按预期捕获异常
代码如下:Python 使用两个函数引发异常未按预期捕获异常,python,exception,raiserror,Python,Exception,Raiserror,代码如下: def funcFail(): 尝试: 引发异常(“外部失败”) 打印(“不应打印”) 例外情况除外,如e: 打印(f“异常:{e}”) 引发异常(f“由于{e}发生的异常”) 最后: return“这是最后一个block:P” 打印(“这是最后一个块:P”) def CHECKEXCEP(): 全局k k=[] 尝试: funcFail() 例外情况除外,如e: 打印(f“异常输出:{e}”) k、 附加(str(e)) 最后: 返回“无” checkexpcep() 期望值:
def funcFail():
尝试:
引发异常(“外部失败”)
打印(“不应打印”)
例外情况除外,如e:
打印(f“异常:{e}”)
引发异常(f“由于{e}发生的异常”)
最后:
return“这是最后一个block:P”
打印(“这是最后一个块:P”)
def CHECKEXCEP():
全局k
k=[]
尝试:
funcFail()
例外情况除外,如e:
打印(f“异常输出:{e}”)
k、 附加(str(e))
最后:
返回“无”
checkexpcep()
期望值:
"Exception : Failed externally"
"This is finally block :P"
"Exception out : Exception in occured due: Failed externally"
"Exception : Failed externally"
输出:
"Exception : Failed externally"
"This is finally block :P"
"Exception out : Exception in occured due: Failed externally"
"Exception : Failed externally"
下次尝试使用python调试器(任何ide都足够好,pycharm或wing等等)。无论如何,请在下面的代码中查看我的内联注释编号:
def funcFail():
try:
# (2)
raise Exception("Failed externally")
print("Should not print")
except Exception as e:
print(f"Exception : {e}")
# (3)
raise Exception(f"Exception in occured due: {e}")
finally:
# (4)
return "This is finally block :P"
print("This is finally block :P")
def checkexpcep():
global k
k = []
try:
# (1)
funcFail()
# (5)
except Exception as e:
print(f"Exception out : {e}")
k.append(str(e))
finally:
return "nothing"
checkexpcep()
调用
checkexpcep()
后,您将到达代码中的点1
。然后调用funcFail()
并到达点2
,在2
处引发一个异常,该异常由except块调用,并到达点3
,在打印该异常后,在点3
处引发新异常,然后到达finally
块,python执行它(注意,finally总是执行)。您将从finally block返回,返回字符串为“This is finally block:P”
。这将隐藏以前的异常。返回将带您进入点5
。返回值未做任何处理,程序成功完成。如果您确实想要预期的输出,则只需将返回值
移出最终
块:
def funcFail():
尝试:
引发异常(“外部失败”)
打印(“不应打印”)
例外情况除外,如e:
打印(f“异常:{e}”)
引发异常(f“由于{e}发生异常”)
最后:
打印(“这是最后一个块:P”)
return“这是最后一个block:P”
def CHECKEXCEP():
全局k
k=[]
尝试:
funcFail()
例外情况除外,如e:
打印(f“异常输出:{e}”)
k、 附加(str(e))
最后:
返回k,“无”
打印(checkexpcep())
输出:
Exception : Failed externally
This is finally block :P
Exception out : Exception in occurred due: Failed externally
(['Exception in occurred due: Failed externally'], 'nothing')
(注意,我在末尾添加了一个
元组的打印,以显示k
的值)显然返回在最后
异常中。@quamrana,有没有其他选择,或者我应该不使用finally继续?我还建议使用自定义异常,可能会使这样的代码更容易调试:您应该使用finally
,以便整理是否存在异常。只有在没有例外的情况下,当您想要返回某个内容时才使用return
,因此return
在finally
中似乎不合适。