当我在Python中进行浮点除法时,如果我除以零,我得到一个例外:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
Run Code Online (Sandbox Code Playgroud)
我真的很想得到NaN或Inf代替(因为NaN或者Inf将通过我的计算的其余部分正确传播而不是杀死我的程序).
我怎样才能做到这一点?
Sve*_*ach 63
获得此行为的最简单方法是使用numpy.float64而不是Python默认float类型:
>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf
Run Code Online (Sandbox Code Playgroud)
当然这需要NumPy.您可以使用numpy.seterr()微调错误处理.
glg*_*lgl 24
方法1:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
Run Code Online (Sandbox Code Playgroud)
方法2:
if b != 0:
value = a / b
else:
value = float('Inf')
Run Code Online (Sandbox Code Playgroud)
但请注意,价值也可以-Inf,所以你应该做一个更独特的测试.不过,上面这个应该会让你知道如何做到这一点.
您可以尝试使用'decimal'模块:
>>> from decimal import *
>>> setcontext(ExtendedContext)
>>> inf = Decimal(1) / Decimal(0)
>>> print(inf)
Infinity
>>> neginf = Decimal(-1) / Decimal(0)
>>> print(neginf)
-Infinity
>>> print(neginf + inf)
NaN
>>> print(neginf * inf)
-Infinity
>>> print(dig / 0)
Infinity
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40859 次 |
| 最近记录: |