質問
TypeError: 'int' object is not iterable
というエラーが出てきました。このエラーが出現する理由がわからなかったので、教えてください。
入力した内容(コード)
sample = 1 for x in sample: print(x)
出たエラー(実行結果)
Traceback (most recent call last): File "typeerror/03.py", line 3, in <module> for x in sample: TypeError: 'int' object is not iterable
回答
TypeError: ... object is not iterable エラー
は、繰り返しに使えないオブジェクトを繰り返し処理で使っているというエラーです。
for文のinの中に繰り返すことのできない値(ここでは1
という数値)を入れているために表示されます。
補足
for文のinの中にはイテラブル(Iterable)でない数値を指定できません。
イテラブルとは簡単に言うと繰り返し(=for文)に使えるオブジェクトです。
イテラブル(Iterable)とは
要素を一度に1つずつ返せるオブジェクト(反復可能オブジェクト)です。 タプル, list, dict, set, strクラスのオブジェクトはイテラブルです。
詳しい情報はドキュメントをご覧ください。 https://docs.python.org/ja/3/glossary.html#term-iterable
繰り返しに使えるオブジェクトは、複数の値があるので、1つずつ取り出せますね。
例えばリスト、タプルで繰り返し処理をする場合と比較してみましょう。
リストweekの内容を1つずつ表示する時
week = ['月', '火', '水', '木', '金'] for day in week: print(day)
for文でタプルの要素を繰り返し処理する時
programming_lang = ('Python 1991', 'Ruby 1995', 'Go 2009') for lang in programming_lang: print(lang, '年生まれ')
どちらも複数の値を持っています。
TypeError: 'int' object is not iterableが出る時にチェックするといい、よくあるミス
TypeError: 'int' object is not iterable
が表示された時には下記のことを確認しましょう。
- 繰り返しに使えないオブジェクト(整数など)を繰り返し処理で使っていないか
- イテラブルを必要とする関数(例:enumerateなど)に整数を渡しているか
また、 TypeError: 'float' object is not iterable
のように、intでない場合も「イテラブルが必要なところにそれ以外のオブジェクトを渡していないだろうか?」と疑ってみましょう。
これでもうTypeError ... object is not iterable
というエラーが出てもビックリする必要はありませんね!