74

Pythonで浮動小数点除算を行う場合、ゼロで除算すると、例外が発生します。

>>> 1.0/0.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float division

私は本当にNaNまたはInf代わりに取得したいのです(NaNまたははInf計算の残りの部分に正しく伝播し、プログラムを強制終了しないため)。

これどうやってするの?

4

5 に答える 5

79

この動作を実現する最も簡単な方法はnumpy.float64、Pythonのデフォルトfloatタイプの代わりに使用することです。

>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf

もちろん、これにはNumPyが必要です。を使用numpy.seterr()して、エラー処理を微調整できます。

于 2012-04-04T13:09:33.327 に答える
26

方法1:

try:
    value = a/b
except ZeroDivisionError:
    value = float('Inf')

方法2:

if b != 0:
    value = a / b
else:
    value = float('Inf')

ただし、値も同様である可能性があることに注意して-Infください。したがって、より特徴的なテストを行う必要があります。それにもかかわらず、これはあなたにそれを行う方法のアイデアを与えるはずです。

于 2012-04-04T13:12:21.637 に答える
9

'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
于 2012-04-04T13:13:27.347 に答える
-5

私があなたの問題を正しく理解しているなら、これが解決策になるはずです:

try:
   1.0/0.0
except:    
   return 'inf'

利用可能なさまざまなPython例外処理方法に従って変更できます

于 2012-04-04T13:19:49.210 に答える
-5

私のPythonプログラムでラッパー関数を使用して、使用しているセンサーが接続されていないときにZeroDivisionErrorを返す単純な除算を行いました。これは、実際には0(ゼロ)を返します。これは私が望んでいたことです。おそらく、より多くの変数で厄介になりますが...

def calculation(a, b):
    if a == 0:
        return 0
    elif b == 0:
        return 0
    else:
        return a/b
于 2015-07-15T12:03:24.883 に答える