1. はじめに|NaN?inf?None?Pythonでよく出てくる謎の値を解説!
Pythonでプログラムを書いていると、ときどき見慣れない「NaN(ナン)」とか「inf(インフ)」とか「None(ノーン)」っていう値に出会うことがあります。
「えっ、NaNって何?値がないってこと?」
「infって見た目が数字だけど…どう扱えばいいの?」
「Noneと0って同じじゃないの?」
はじめて見たときは、そう思って戸惑ってしまうかもしれません。でも安心してください。実はこれらは**Pythonでよく使われる「特殊な値」**なんです。
この「はじめに」のパートでは、この記事でどんなことがわかるのか、簡単にご紹介します。
💡 この記事でわかること
このブログ記事では、次の3つの値について、わかりやすくやさしく解説します。
| 名前 | 読み方 | 意味 |
|---|---|---|
NaN | ナン | Not a Number(数じゃないよ) |
inf | インフ | Infinity(無限に大きい数) |
None | ノーン | 値が「何もない」状態 |
「数みたいに見えるけど、ちょっと特殊な存在」や「そもそも数じゃない」という感じで、普通の数値とはちょっとちがうこれらの値。
どうやって作るの?
どうやって調べるの?
エラーの原因になったりしないの?
そんな疑問を解決するために、それぞれの特徴、作り方、判別方法を具体的なコード付きで解説していきます。
2. 無限大(inf)の基本と使い方
Pythonでは、ふつうの数値だけでなく「無限に大きい数(無限大)」も扱うことができます。それが inf(インフ)と呼ばれる特殊な値です。
🔢 無限大(inf)ってなに?
「無限大」とは、とてつもなく大きな数のことです。数学の授業でも ∞(インフィニティ)という記号を見たことがあるかもしれませんね。
Pythonでも、たとえばこんなふうに書くと無限大を表す値が作れます。
x = float('inf') # プラスの無限大
y = float('-inf') # マイナスの無限大
float() は少数を表す「浮動小数点数」という型で、文字列 'inf' や '-inf' を使って無限大やマイナス無限大を作ることができます。
🧪 無限大が出てくるケース
次のような計算でも、無限大になることがあります。
import sys
print(sys.float_info.max) # Pythonで扱える最大のfloat値
print(sys.float_info.max * 2) # 無限大になる
Pythonのfloat型では、扱える最大の値(約1.797e+308)を超えると、自動的にinfになります。
✅ 無限大かどうかを調べる方法
無限大かどうかをチェックするには、mathモジュールの isinf() 関数を使います。
import math
x = float('inf')
print(math.isinf(x)) # True
また、プラスかマイナスかを知りたいときは == を使って比較するのが簡単です。
x = float('inf')
y = float('-inf')
print(x == float('inf')) # True
print(y == float('-inf')) # True
⚠️ 無限大を扱うときの注意点
無限大を使った計算はできるけど、ちょっと注意も必要です。
print(1000 + float('inf')) # inf
print(float('inf') - float('inf')) # nan(←これがややこしい!)

「無限大 − 無限大」のような計算できないものは NaN(非数)になってしまいます。これは次に説明しますね!
3. 非数(NaN)の基本と注意点
Pythonでは、計算の結果がどうしても「数にならない」場合に、NaN(ナン) という値が使われます。
この「NaN」は Not a Number(ナンバーじゃないよ) という意味で、「数値として扱えない数値」といった不思議な存在です。
💡 NaNが出てくるのはどんなとき?
たとえば、こんな計算をしてみてください。
x = float('inf') - float('inf')
print(x) # nan(非数)
「無限大から無限大を引いたら、いくつになるの?」
…という問いに、Pythonは答えられません!
だから「わかんない!ナン(nan)!」となるわけです。
また、データ分析やファイル読み込みをしているときに、データが抜けていてNaNになることもあります。
🛠 NaNの作り方と使い方
NaNは、自分で明示的に作ることもできます。
nan_value = float('nan')
print(nan_value) # nan
ただし注意点があります!
NaNは、どんな演算をしてもNaNになります。
print(float('nan') + 1) # nan
print(float('nan') * 100) # nan
まるで「汚染された値」のように、計算すると他の数も巻き込んで全部NaNになっちゃうんです。
❌ == で比較してはいけない!
ここが最大のポイント!
x = float('nan')
print(x == float('nan')) # False
NaNは、自分自身とすら等しくありません!
これがバグのもとになりがちなので要注意です。
✅ NaNを判定する正しい方法
NaNかどうかを判定したいときは、math.isnan()を使いましょう。
import math
x = float('nan')
print(math.isnan(x)) # True
この関数なら確実にNaNかどうかを見分けてくれます!
🧠 補足:NaNとNoneは別物!
NaNは「計算ができない数」Noneは「そもそも値がない」

という違いがあります。次の章では「None」についても詳しく解説しますね!
4. Noneの役割と判別方法
Pythonを使っていると、「None(ノーン)」という値が出てくることがあります。これもNaNやinfと同じく、ちょっと特殊な存在です。
でも、Noneは「数」ではなくて、「なにもないよ」っていう意味を持った特別なオブジェクトなんです。
🔍 Noneってどんなときに出てくる?
いくつか例を見てみましょう。
① 関数に戻り値がないとき
def hello():
print("こんにちは")
result = hello()
print(result) # None
このように、returnで何も返さない関数を呼び出すと、結果(戻り値)は自動的にNoneになります。
② 値が設定されていないとき
name = None # 「まだ名前が決まっていない」みたいな感じ
たとえば、あとで値を入れる予定の変数に「まだ何もないよ」という意味でNoneを入れておくこともできます。
🧪 Noneかどうかを調べる方法
Noneかどうかを判定したいときは、is演算子を使います。
x = None
print(x is None) # True
ポイントは、==ではなく、必ずisを使うこと!
isは「同じものかどうか(IDが同じか)」を判定しますが、Noneはどこで使っても同じひとつのオブジェクトなので、isで確実に見分けられるんです。
❗ Noneは「False」と同じ扱いになる?
Pythonでは、if文の条件としてNoneを使うと「False」として扱われます。
x = None
if not x:
print("xはNoneだよ") # 出力される!
ただし、これは「NoneがFalseと等しい」という意味ではありません。あくまで**「条件式の中でFalseと同じように評価される」**というだけです。
✅ 他にもFalseっぽくなるもの
Pythonでは、次のようなものもif文の中で「False」として扱われます。
0(ゼロ)0.0(小数のゼロ)''(空文字列)[](空のリスト){}(空の辞書)()(空のタプル)

でもそれぞれの意味や型はちゃんと違うので、使い分けが大事なんですね。
5. まとめ|inf・NaN・Noneの使い分けを整理しよう!
ここまで、Pythonでよく登場する3つの「ちょっと変わった値」について見てきました。
| 値 | 意味 | 型 | 判別方法 |
|---|---|---|---|
inf | 無限に大きな数 | float | math.isinf(x) や x == float('inf') |
NaN | 計算不能な数(Not a Number) | float | math.isnan(x)(※==での比較は不可) |
None | 値が存在しない | NoneType | x is None(※==ではなくisを使う) |
🎯 この記事で学んだポイント
infはとてつもなく大きな数で、数学の「∞(インフィニティ)」のようなもの。NaNは「計算できない数」で、結果がよくわからないときに出てくる。Noneは「そもそも値がない状態」で、float型ではなく独自の型。- それぞれ専用の判別方法を使うのが大切!(
isinf、isnan、is)
プログラムを書いていて「なんか変な値が出た!」と思ったときは、ぜひこの3つを思い出してみてください。きっと原因をつかむヒントになりますよ!
🧭 あわせて読みたい
🔗 【Python入門4】Pythonの基本データ型とは?整数・小数・文字列・真偽値と型変換をやさしく解説
→ float型やNoneといったPythonの基本データ型をしっかり理解できます。
🔗 【Python入門7】if文とelif文の使い方をやさしく解説|条件分岐の基本を初心者向けに解説!
→ NoneやNaNがif文でどう扱われるかを知るのにぴったりです。
🔗 Python初心者がよくつまずくエラー10選と解決法まとめ|原因から対処法までやさしく解説
→ NaNやinfが原因のエラーにも役立つ、よくある落とし穴対策まとめです。
🔗 【Python入門】トレースバック(traceback)の読み方と活用法
→ エラーが出たとき、どこで止まったかを読み解く力がつきます!
よくある質問(Q&A)
- QNaNとNoneの違いは?
- A
NaNは「数だけど意味がない」、Noneは「そもそも何もない」。NaNはfloat型、NoneはNoneType型です。
- Qinfって無限に大きいの?どこまで使える?
- A
理論上はどこまでも大きい数として使えますが、実際の計算には注意が必要です。inf同士の演算はNaNになることもあります。
- Q
==でNaNが比較できないのはなぜ? - A
IEEE 754という規格で「NaNは自分自身とも等しくない」と決まっているからです。必ず
math.isnan()を使いましょう。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。