Python3中为何“除以零”有时不报错?图片缩放代码存疑
循环内未触发ZeroDivisionError的原因
核心原因是循环内的dot_X在line_Y=0时的值为0,此时计算式0 * source_H / 0在Python中结果是nan(非数字),而非直接抛出除零错误。
具体细节:
- 当
line_Y=0时,直接执行source_H/line_Y,因为source_H是图片高度(非零值),必然触发ZeroDivisionError。 - 但循环内的计算是
dot_X * source_H / line_Y,如果此时dot_X为0,整个表达式等价于0 / 0。Python对这种0除以0的情况不会抛出异常,而是返回nan——PIL库在处理nan类型的像素坐标时,会自动忽略或做兜底处理(比如取默认像素),所以脚本不会崩溃,只是最终图像效果可能不符合你的预期。
可以做个简单验证:
- 在循环内添加打印语句:
print(line_Y, dot_X, dot_X * source_H/line_Y),当line_Y=0时,会看到输出类似0 0 nan。 - 若
dot_X在line_Y=0时不为0,循环内同样会触发ZeroDivisionError。
内容的提问来源于stack exchange,提问作者Molly
相关产品推荐
相关产品推荐

