まず結論
AttributeError は、その値が持っていないメソッドや属性を使おうとしたときに出ます。
number = 10
number.strip()
strip() は文字列でよく使うメソッドです。
数値の 10 には strip() がないため、エラーになります。
こんなときに読む記事です
次のようなエラーで止まった人向けです。
AttributeError: 'int' object has no attribute 'strip'
意味は「int には strip という属性やメソッドがありません」です。
絵で見るなら
ドットの左側は、道具箱です。
たとえば text.strip() なら、text という道具箱の中から strip() を使おうとしています。
でも、その道具箱に strip() が入っていなければ、Pythonは見つけられません。
ドットの左側を見る
まず、ドットの左側を確認します。
number.strip()
この場合は number です。
次に、number に何が入っているかを見ます。number = 10 なら整数なので、文字列用の strip() は使えません。
型によって使える道具が違う
文字列、リスト、辞書では、使えるメソッドが違います。
text = " hello "
print(text.strip())
これは文字列なので動きます。
items = ["apple", "banana"]
items.append("orange")
これはリストなので、append() が使えます。
よくある原因
よくある原因は、思っていた型と実際の型が違うことです。
たとえば、input() の結果は文字列です。
age = input("年齢は?")
数値として扱いたいなら、int() で変換します。
age = int(input("年齢は?"))
読み方のコツ
AttributeError が出たら、次の順番で見ます。
- ドットの左側は何か
- その値の型は何か
- ドットの後ろの名前は、その型で使えるものか
全部覚えようとせず、まずはエラー文に出ている型と名前を見れば大丈夫です。
手を動かすミニ練習
次のコードを動かして、エラーを確認してみましょう。
number = 10
number.strip()
次に、number = " 10 " に変えると、strip() が動くことを確認できます。
3行まとめ
- AttributeErrorは、値が持っていない名前を使ったときに出る。
- ドットの左側の値の種類を確認する。
- 文字列、リスト、辞書で使えるメソッドは違う。