How to get NaN when I divide by zero
Question:
When I do floating point division in Python, if I divide by zero, I get an exception:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
I’d really like to get NaN
or Inf
instead (because the NaN
or Inf
will propagate through the rest of my calculation correctly and not kill my program).
How can I do this?
Answers:
The easiest way to get this behaviour is to use numpy.float64
instead of Python default float
type:
>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf
Of course this requires NumPy. You can use numpy.seterr()
to fine-tune the error handling.
Method 1:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
Method 2:
if b != 0:
value = a / b
else:
value = float('Inf')
But be aware that the value could as well be -Inf
, so you should make a more distinctive test. Nevertheless, this above should give you the idea how to do it.
You could try using the ‘decimal’ module:
>>> 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
If i understand your problem properly then this should be the solution:
try:
1.0/0.0
except:
return 'inf'
you can modified it according to various python exception handling method available
I used a wrapper function in a python program of mine for a simple division that was returning ZeroDivisionError when the sensors I was using weren’t plugged in. It simply returns 0 (zero), which in real-world terms is what I wanted. Probably gets messy with more variables, however…
def calculation(a, b):
if a == 0:
return 0
elif b == 0:
return 0
else:
return a/b
When I do floating point division in Python, if I divide by zero, I get an exception:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
I’d really like to get NaN
or Inf
instead (because the NaN
or Inf
will propagate through the rest of my calculation correctly and not kill my program).
How can I do this?
The easiest way to get this behaviour is to use numpy.float64
instead of Python default float
type:
>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf
Of course this requires NumPy. You can use numpy.seterr()
to fine-tune the error handling.
Method 1:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
Method 2:
if b != 0:
value = a / b
else:
value = float('Inf')
But be aware that the value could as well be -Inf
, so you should make a more distinctive test. Nevertheless, this above should give you the idea how to do it.
You could try using the ‘decimal’ module:
>>> 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
If i understand your problem properly then this should be the solution:
try:
1.0/0.0
except:
return 'inf'
you can modified it according to various python exception handling method available
I used a wrapper function in a python program of mine for a simple division that was returning ZeroDivisionError when the sensors I was using weren’t plugged in. It simply returns 0 (zero), which in real-world terms is what I wanted. Probably gets messy with more variables, however…
def calculation(a, b):
if a == 0:
return 0
elif b == 0:
return 0
else:
return a/b