TypeError: argument of type 'NoneType' is not iterable の原因と対処法

Pythonでコードを実行中に、以下のようなエラーに遭遇したことはありませんか?

このエラーは一見すると分かりづらいですが、原因と対処法を理解すれば、すぐに修正できます。
この記事では、エラーの背景と具体的な解決方法について解説します。


順番

エラーの発生例と原因

例えば、以下のようなコードを実行したときにこのエラーが発生します。

このとき、変数 codeNone が代入されていると、
'A' in code のような判定は実行できません。

なぜなら、None はイテラブル(繰り返し可能なオブジェクト)ではないため、
in 演算子で検索することができないからです。

Pythonにおいて NoneNoneType という特別な型であり、
文字列やリストのように中身を持っていないため、
イテレーション(ループ処理や in などの操作)を行うことができません。


解決方法

このエラーを回避するには、None を事前にチェックする必要があります。

以下に2つの方法を紹介します。

方法①:明示的に None をチェックする

この方法では、codeNone でないことを最初に確認することで、
in を安全に使えるようにしています。

方法②:Pythonの真偽値評価を利用する

この書き方では、code が空文字 ''NoneFalse の場合は if 文の評価が False になり、'A' in code は実行されません。
ただし、空文字やリストも同時に除外されるため、意図に応じて使い分けが必要です。


補足アドバイス

  • 外部から受け取る値や戻り値が None になる可能性がある関数を使うときは、特に注意が必要です。
  • NoneType に対しては、inlen()[] などの操作はできません。事前に型や値の確認を行うことが安全なコードを書くポイントです。
  • デバッグ時には、print(type(code))print(code) を使って、中身を確認すると原因が見つけやすくなります。

このエラーは、Pythonに慣れてきた中級者でもハマりやすい落とし穴です。
NoneType がどういうものかを理解して、安全な条件分岐を書くようにしましょう。


おすすめの記事