AttributeError: object has no attribute 'length' の原因と直し方
他言語の.lengthや.size()の感覚でPythonのコレクションを扱おうとしたときに出るエラーです。Pythonでは長さの取得はlen()という組み込み関数に統一されています。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
2- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
AttributeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
'list' object has no attribute 'length'- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 nums = [1, 2, 3] 2 print(nums.length) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(nums.length)
^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'length'
リストの要素数はlen()という組み込み関数で取得します。他言語の.lengthや.size()のような書き方はPythonにはありません。
直し方: nums.length を len(nums) にします。
広告
広告スロット(未設定)
パターン2
1 name = "hello" 2 print(name.length) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(name.length)
^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'length'
文字列の長さも同じくlen()です。他言語では文字列だけ.lengthのことがありますが、Pythonでは統一されています。
直し方: name.length を len(name) にします。
パターン3
1 d = {"a": 1} 2 print(d.length ) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(d.length)
^^^^^^^^
AttributeError: 'dict' object has no attribute 'length'
辞書の要素数もlen()で取得します。配列・文字列・辞書・集合など、Pythonのコレクションはすべてlen()で長さを揃えて扱えます。
直し方: d.length を len(d) にします。
よくある誤解
文字列だけ特別扱いだと思われがちですが、リスト・文字列・辞書・タプルなど、Pythonのコレクションはすべてlen()で長さを取得します。属性(.length)ではなく関数(len())である点が他言語との違いです。
まとめ
AttributeError: object has no attribute 'length'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。