Check for NaN values in Python

David Y.
jump to solution

The Problem

I sometimes see the value NaN (Not a Number) when working with floats in Python. How can I check whether a given value is NaN?

The Solution

The best way to do this is by using the isnan() function from Python’s built-in math library:

import math

nan = float('nan')
zero = 0
one = 1

print(math.isnan(nan))  # will print True
print(math.isnan(zero))  # will print False
print(math.isnan(one))  # will print False

Note that isnan() will throw a TypeError if given a non-numeric value. Thus, a more robust implementation might look like this:

import math

def is_nan(value):
    try:
        return math.isnan(value)
    except TypeError:
        return False

nan = float('nan')
zero = 0
one = 1
hello = "Hello!"

print(is_nan(nan))  # will print True
print(is_nan(zero))  # will print False
print(is_nan(one))  # will print False
print(is_nan(hello))  # will print False

Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

Sentry