ZeroDivisionError因数学上除以零未定义而被Python强制抛出,触发于/、//、%运算中除数为0(含0.0、-0.0),不捕获则程序崩溃。

为什么直接除零会抛出 ZeroDivisionError
Python 在执行 /、// 或 % 运算时,若除数为 0(或 0.0),会立即中断执行并抛出 ZeroDivisionError。这不是警告,是硬性异常,不捕获就崩溃。
常见触发场景包括:动态计算平均值、归一化数值、分页计算总页数、比例因子推导等——只要分母来自用户输入、配置、数据库查询或中间计算结果,就可能为零。
用 if 提前判断除数是否为零
适合逻辑清晰、分支明确、且「零值有明确业务含义」的场景。比如“无数据时返回 0”或“跳过该计算”。
- 检查必须覆盖所有可能为零的类型:
0、0.0、-0.0(虽然-0.0 == 0.0为True,但稳妥起见仍建议用== 0或math.isclose(x, 0)) - 避免只判
if denominator:—— 这在denominator是浮点数且为0.0时有效,但若它是0j(复数零)或自定义对象,可能失效 - 示例:
def safe_divide(a, b):<br> if b == 0:<br> return 0 # 或 float('nan'), None, raise ValueError("b cannot be zero")<br> return a / b
用 try-except 捕获 ZeroDivisionError
适合除法嵌套较深、分母来源复杂、或你希望统一处理所有数值异常(如同时兼顾 ValueError)的情况。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 不要裸写
except:,必须明确捕获ZeroDivisionError - 避免在循环内对每次除法都做
try-except——性能开销略高;可先批量校验分母,再统一运算 - 注意:
try-except不会吞掉其他异常,比如a是字符串时抛的TypeError仍会上抛 - 示例:
try:<br> result = numerator / denominator<br>except ZeroDivisionError:<br> result = float('inf') if numerator > 0 else float('-inf')
哪些情况容易漏判导致运行时崩溃
最常被忽略的是「看似安全实则危险」的表达式:
-
1 / (x - y):当x == y时分母为零,但没人显式检查x - y == 0 -
data[i] / sum(data):sum(data)为0(例如data = [0, 0, 0]) - 使用
numpy时默认静默返回inf或nan,但纯 Python 的list运算不会——混用时行为不一致 - 从 JSON 或 CSV 读入的数字可能是字符串
"0",未转成int/float就参与运算,会先报TypeError,掩盖了后续的除零问题
真正麻烦的不是不会写 if 或 try,而是没意识到那个分母「有可能是零」——尤其当它藏在函数调用链深处或由多个变量组合而来时。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










