スポンサーリンク

【Python入門】NaN・inf・Noneとは?初心者向けにやさしく解説!

Python入門

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(ノーン)」という値が出てくることがあります。これもNaNinfと同じく、ちょっと特殊な存在です。

でも、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だよ") # 出力される!

ただし、これは「NoneFalseと等しい」という意味ではありません。あくまで**「条件式の中でFalseと同じように評価される」**というだけです。


✅ 他にもFalseっぽくなるもの

Pythonでは、次のようなものもif文の中で「False」として扱われます。

  • 0(ゼロ)
  • 0.0(小数のゼロ)
  • ''(空文字列)
  • [](空のリスト)
  • {}(空の辞書)
  • ()(空のタプル)

でもそれぞれの意味や型はちゃんと違うので、使い分けが大事なんですね。




5. まとめ|inf・NaN・Noneの使い分けを整理しよう!

ここまで、Pythonでよく登場する3つの「ちょっと変わった値」について見てきました。

意味判別方法
inf無限に大きな数floatmath.isinf(x)x == float('inf')
NaN計算不能な数(Not a Number)floatmath.isnan(x)(※==での比較は不可)
None値が存在しないNoneTypex is None(※==ではなくisを使う)

🎯 この記事で学んだポイント

  • inf はとてつもなく大きな数で、数学の「∞(インフィニティ)」のようなもの。
  • NaN は「計算できない数」で、結果がよくわからないときに出てくる。
  • None は「そもそも値がない状態」で、float型ではなく独自の型。
  • それぞれ専用の判別方法を使うのが大切!(isinfisnanis

プログラムを書いていて「なんか変な値が出た!」と思ったときは、ぜひこの3つを思い出してみてください。きっと原因をつかむヒントになりますよ!


🧭 あわせて読みたい

🔗 【Python入門4】Pythonの基本データ型とは?整数・小数・文字列・真偽値と型変換をやさしく解説
 → float型やNoneといったPythonの基本データ型をしっかり理解できます。

🔗 【Python入門7】if文とelif文の使い方をやさしく解説|条件分岐の基本を初心者向けに解説!
 → NoneNaNがif文でどう扱われるかを知るのにぴったりです。

🔗 Python初心者がよくつまずくエラー10選と解決法まとめ|原因から対処法までやさしく解説
 → NaNinfが原因のエラーにも役立つ、よくある落とし穴対策まとめです。

🔗 【Python入門】トレースバック(traceback)の読み方と活用法
 → エラーが出たとき、どこで止まったかを読み解く力がつきます!


よくある質問(Q&A)

Q
NaNとNoneの違いは?
A

NaNは「数だけど意味がない」、Noneは「そもそも何もない」。NaNはfloat型、NoneはNoneType型です。

Q
infって無限に大きいの?どこまで使える?
A

理論上はどこまでも大きい数として使えますが、実際の計算には注意が必要です。inf同士の演算はNaNになることもあります。

Q
== でNaNが比較できないのはなぜ?
A

IEEE 754という規格で「NaNは自分自身とも等しくない」と決まっているからです。必ず math.isnan() を使いましょう。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク