【Python】「AttributeError: ~ object has no attribute …」の解決方法
こんにちは、にわこまです。
今回は、pythonのAttributeErrorの解決方法について紹介します。AttributeErrorはクラスや関数を多く使う開発で起こること多いエラーです。データ型を正しく理解する必要があります。
誤字脱字や分からない点、解決してほしい問題がありましたら、ご連絡お願いいたします。
メールまたはTwitterのDMで受け付けています。
スポンサードサーチ
AttributeErrorの解決方法
そのデータ型が持つプロパティ(変数)または関数を確認する
プロパティや関数を確認することでAttributeErrorを解決することができます。
そもそも「AttributeError」とは、「そのデータ型ではそのプロパティまたはその関数は定義されていません」というエラーです。
プロパティとは、クラス内で定義した変数です。以下のコードを例に取ると、「self.name」と「self.age」がプロパティにあたります。
class Person:
def __init__(self):
self.name = "Anonymous"
self.age = 0
Python AttributeErrorの公式ドキュメントはこちら
例えば「AttributeError: ‘str’ object has no attribute ‘sort’」というエラーが発生したとします。このエラーが指しているのは、「str型にはsort関数が定義されていません」ということです。
エラーのサンプルコード1(関数)
AttributeErrorが発生するサンプルコードとその実行結果を以下に示します。
s = "scripts"
s.sort()
=== 実行結果 ===
Traceback (most recent call last):
File "has_no_attribute.py", line 2, in <module>
s.sort()
AttributeError: 'str' object has no attribute 'sort'
1行目は変数sにscriptsという文字列を代入しています。
2行目は文字列をアルファベット順に並び替えようとsort関数を実行しています。
str型にはsort関数は定義されていないためエラーが発生しました。
sort関数はlist型に定義されているため、リストを使って並び替えを行うことで、エラーを回避できます。
エラーを解決したサンプルコードとその実行結果を以下に示します。
s = "scripts"
s = "".join(sorted(list(s)))
print(s)
=== 実行結果 ===
ciprsst
エラーのサンプルコード2(プロパティ)
AttributeErrorが発生するサンプルコードとその実行結果を以下に示します。
class Person:
def __init__(self):
self.name = "Anonymous"
self.age = 0
person = Person()
print(person.job)
=== 実行結果 ===
Traceback (most recent call last):
File "has_no_attribute2.py", line 7, in <module>
print(person.job)
AttributeError: 'Person' object has no attribute 'job'
1行目から4行目にかけてPersonクラスを定義しています。
3行目と4行目では、self.nameとself.ageを定義しています。
6行目では、Personオブジェクトを生成しています。
7行目では、person.jobを表示しています。
7行目のprint文で定義されていないプロパティを指定したため、エラーが発生しました。
jobプロパティを追加することで解決することができます。
エラーを解決したサンプルコードとその実行結果を以下に示します。
class Person:
def __init__(self):
self.name = "Anonymous"
self.age = 0
self.job = "Unknown"
person = Person()
print(person.job)
=== 実行結果 ===
Unknown
まとめ
今回は、pythonのエラーの1つであるAttributeErrorの解決方法を紹介しました。
AttributeErrorはクラスや関数を多く使う開発で起こりやすいです。そのため、クラスのプロパティを記録することやそのデータ型で使える関数を理解することが必要となります。
改めて解決方法を以下に示します。
そのデータ型が持つプロパティ(変数)または関数を確認する
解決してほしいエラーや問題などがありましたらメールまたはTwitterのDMまで!
最後までお読みいただきありがとうございます。
スポンサードサーチ