
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
がどういうものかを理解して、安全な条件分岐を書くようにしましょう。