为什么这段Python代码中的TypeError异常捕获逻辑没有生效?
问题原因分析
核心逻辑是:Python 函数调用时会先执行所有参数的计算逻辑,再将计算结果传入函数内部,你的代码异常未被捕获的原因如下:
- 调用
check(a+b)时,程序会先计算a + b的值,字符串和整数相加直接触发 TypeError,报错发生时还没有进入check函数的执行流程 check内部的try/except只能捕获函数内部代码抛出的异常,根本捕获不到函数调用前参数计算阶段的报错
修正方案
你可以把需要执行的运算逻辑封装成可调用对象传入,让运算在 check 内部的 try 块中执行,修正后的代码如下:
a = '123' b = 123 def check(func): try: data = func() print(type(data)) except TypeError as error: print(f'Error: {error}') # 把运算逻辑封装成lambda匿名函数传入,运算会在check内部执行 check(lambda: a + b)
运行后即可得到预期的异常输出:Error: can only concatenate str (not "int") to str
内容的提问来源于stack exchange,提问作者Sebastian Kvalsøy
相关产品推荐
相关产品推荐

