【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

  

 

例えば「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まで!

  

 

最後までお読みいただきありがとうございます。


スポンサードサーチ