Gar*_*ett 5 python numpy exception
我注意到在代码中:
import numpy as np
a = 0.0
print a / a
b = np.array( [0.0] )
print b[0] / b[0]
Run Code Online (Sandbox Code Playgroud)
第一个打印函数抛出ZeroDivisionError,但第二个输出nan.我知道的type(b[0])是numpy.float64,虽然type(a)是float.我有两个问题:
1)为什么这样实现?
2)无论如何让它抛出ZeroDivisionError?
我必须说,我更常感到常见的Python浮点数会引发错误.据我所知,返回NaN是正确的方法,因为在IEEE 754中定义了浮点数.
http://grouper.ieee.org/groups/754/faq.html#exceptions
为什么不将零除(或溢出或下溢)停止程序或触发错误?为什么数字标准包含"not-a-number"(
NaN)?754模型鼓励强大的计划.它不仅适用于数字分析师,也适用于电子表格用户,数据库系统甚至咖啡壶.
NaNs和无穷大的传播规则允许无关紧要的异常消失.同样,逐渐下溢会在精度范围内保持误差属性.当需要注意特殊情况时,可以通过陷阱或在方便的时候通过状态标志立即检查它们.陷阱可用于停止程序,但不可恢复的情况极为罕见.简单地停止程序不是嵌入式系统或网络代理的选项.更常见的是,陷阱记录诊断信息或替换有效结果.
标志提供可预测的控制流程和速度.它们的使用要求程序员了解异常情况,但标志粘性允许程序员在必要时延迟处理异常情况.
在处理没有这种能力的数字时,例如积分除法,错误是一种适当的响应.