Python 3中try/except无法捕获除零错误,是我理解有误吗?
问题原因与修复方案
你的代码里try-except块只包裹了函数定义,而ZeroDivisionError是在调用divide(6, 0)时才会触发的——这行调用代码不在try的监控范围内,所以异常直接抛出,没被捕获到。
修复方案一:将函数调用放入try块
把触发异常的代码放到try范围内,这样异常就能被捕获:
def divide(num, deno): return num / deno try: result = int(divide(6, 0)) print(result) except ZeroDivisionError: print('Denominator cannot be 0')
修复方案二:在函数内部处理异常
如果希望函数本身具备异常处理能力,可以把try-except写到函数内部:
def divide(num, deno): try: return num / deno except ZeroDivisionError: print('Denominator cannot be 0') return None # 返回None避免后续int()转换报错 result = divide(6, 0) if result is not None: print(int(result))
两种方案的区别:
- 方案一在调用层面处理异常,适合需要根据不同调用场景定制异常逻辑的情况
- 方案二让函数自身更健壮,调用方无需额外处理除零异常
内容的提问来源于stack exchange,提问作者joah
相关产品推荐
相关产品推荐

