python教程,如何处理捕获不到的分母为零的错误信息?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
基于python
的sklearn
,苏南大叔调试模型得分原理的时候,发现:当分母为零的时候,会引发一个无法捕获的错误提示信息。这种情况该如何处理呢?为什么这个错误信息无法被捕获呢?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文分析python
语言中,关于捕获分母为零的问题。测试环境:win10
,python@3.11.0
。
正常可以捕获
正常情况下,是可以使用try exception
来捕获分母为零的异常信息的。
测试代码一:
try:
s = 168 / 0
except Exception as err:
print(err)
输出:
division by zero
测试代码二:
try:
n = 168 / 0.0
except Exception as err:
print(err)
输出:
float division by zero
相关文章:
https://newsn.net/say/python-try.html
无法捕获的情况
在下面的代码中,运算结果为零的同时,会得到无法捕获的警告提示信息。
测试代码:
import numpy as np
a = np.array([0])
try:
sn = 168 / a[0]
except Exception as err:
print(err)
finally:
print(a[0], type(a[0]))
或者模拟一下前文中的模型预测得分过程:
import numpy as np
y_true = np.array([0, 1])
y_pred = np.array([1, 1])
tn = sum((y_true == 0) & (y_pred == 0))
try:
p = 666 / tn
except Exception as err:
print(err)
finally:
print(tn, type(tn))
无法捕获的警告提示信息是:
RuntimeWarning: divide by zero encountered in long_scalars
这两个测试代码的共同特点,
- 都涉及
numpy
,分母零的类型都不是普通的int32
,是numpy.int32
。 - 提示信息的类型是
warning
警告,并不是exception
异常,所以没有被捕获到。 - 代码并没有停止运行,继续执行了。即使分母为零,最后结果也返回值为零。
解决方案
既然try...exception...
不能捕获这个错误警告信息,就最终使用了python
的三目运算来解决了这个问题。测试代码:
import numpy as np
s = np.array([0, 1])
n = np.array([1, 1])
tn = sum((s == 0) & (n == 0))
t = 666/tn if (tn>0) else 0
print(t)
相关文章:
https://newsn.net/say/python-if-else.html
结束语
更多python
相关文章,请参考苏南大叔的经验总结:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。