
Pythonでコードを実行中に、以下のようなエラーに遭遇したことはありませんか?
TypeError: argument of type 'NoneType' is not iterable
このエラーは一見すると分かりづらいですが、原因と対処法を理解すれば、すぐに修正できます。
この記事では、エラーの背景と具体的な解決方法について解説します。
順番
エラーの発生例と原因
例えば、以下のようなコードを実行したときにこのエラーが発生します。
if 'A' in code:
このとき、変数 code に None が代入されていると、'A' in code のような判定は実行できません。
なぜなら、None はイテラブル(繰り返し可能なオブジェクト)ではないため、in 演算子で検索することができないからです。
Pythonにおいて None は NoneType という特別な型であり、
文字列やリストのように中身を持っていないため、
イテレーション(ループ処理や in などの操作)を行うことができません。
解決方法
このエラーを回避するには、None を事前にチェックする必要があります。
以下に2つの方法を紹介します。
方法①:明示的に None をチェックする
if code is not None and 'A' in code:
この方法では、code が None でないことを最初に確認することで、in を安全に使えるようにしています。
方法②:Pythonの真偽値評価を利用する
if code and 'A' in code:
この書き方では、code が空文字 '' や None、False の場合は if 文の評価が False になり、'A' in code は実行されません。
ただし、空文字やリストも同時に除外されるため、意図に応じて使い分けが必要です。
補足アドバイス
- 外部から受け取る値や戻り値が
Noneになる可能性がある関数を使うときは、特に注意が必要です。 NoneTypeに対しては、in、len()、[]などの操作はできません。事前に型や値の確認を行うことが安全なコードを書くポイントです。- デバッグ時には、
print(type(code))やprint(code)を使って、中身を確認すると原因が見つけやすくなります。
このエラーは、Pythonに慣れてきた中級者でもハマりやすい落とし穴です。NoneType がどういうものかを理解して、安全な条件分岐を書くようにしましょう。

