Code Fix

初級

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.lengthlen(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.lengthlen(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.lengthlen(d) にします。

この問題を解いてみる →

よくある誤解

文字列だけ特別扱いだと思われがちですが、リスト・文字列・辞書・タプルなど、Pythonのコレクションはすべてlen()で長さを取得します。属性(.length)ではなく関数(len())である点が他言語との違いです。

まとめ

AttributeError: object has no attribute 'length'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)