AttributeError: object has no attribute(メソッド名タイプミス)の原因と直し方
メソッド名の綴りミスや、他言語の命名習慣(add・trim・toUpperCaseなど)を持ち込んだときに出るエラーです。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
2- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
AttributeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
'str' object has no attribute 'uper'. Did you mean: 'upper'?- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 name = "tom" 2 print(name.uper ()) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(name.uper())
^^^^^^^^^
AttributeError: 'str' object has no attribute 'uper'. Did you mean: 'upper'?
メソッド名の綴りミスです。似た名前のメソッドが存在する場合はPythonが候補を提示してくれます。
直し方: uper を upper にします。
広告
広告スロット(未設定)
パターン2
1 nums = [1, 2, 3] 2 nums.add (4) ^ 3 print(nums)
Traceback (most recent call last):
File "main.py", line 2, in <module>
nums.add(4)
^^^^^^^^
AttributeError: 'list' object has no attribute 'add'
他言語のadd()やpush()の感覚で書くと起きます。Pythonのリストへの要素追加はappend()です。
直し方: add を append にします。
パターン3
1 s = " hi " 2 print(s.trim ()) ^
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(s.trim())
^^^^^^
AttributeError: 'str' object has no attribute 'trim'. Did you mean: 'strip'?
他言語のtrim()に慣れていると起きやすいミスです。Pythonで前後の空白を除去するのはstrip()です。
直し方: trim を strip にします。
よくある誤解
似た名前のメソッドが存在すればPythonが候補を提示してくれますが、他言語の慣習をそのまま持ち込んだ場合(addやtrimなど)は候補が無く提示されません。
まとめ
AttributeError: object has no attribute(メソッド名タイプミス)の原因と直し方は中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。