Code Fix

中級

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が候補を提示してくれます。

直し方: uperupper にします。

この問題を解いてみる →

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

パターン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()です。

直し方: addappend にします。

この問題を解いてみる →

パターン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()です。

直し方: trimstrip にします。

この問題を解いてみる →

よくある誤解

似た名前のメソッドが存在すればPythonが候補を提示してくれますが、他言語の慣習をそのまま持ち込んだ場合(addやtrimなど)は候補が無く提示されません。

まとめ

AttributeError: object has no attribute(メソッド名タイプミス)の原因と直し方は中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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