Erreur d'accès à une clé inexistante dans getattr
Citation de Alivia Amelie le 11 décembre 2024, 9 h 20 minBonjour,
J'ai un problème avec une classe Python qui lève une erreur lors de l'exécution:
class MyClass:
passobj = MyClass()
print(getattr(obj, "name"))
Erreur : AttributeError: 'MyClass' object has no attribute 'name'
Bonjour,
J'ai un problème avec une classe Python qui lève une erreur lors de l'exécution:
class MyClass:
pass
obj = MyClass()
print(getattr(obj, "name"))
Erreur : AttributeError: 'MyClass' object has no attribute 'name'
Citation de dominator le 11 décembre 2024, 10 h 24 minL'erreur vient du fait que vous essayez d'accéder à un attribut name qui n'existe pas dans l'objet obj de la classe MyClass. En Python, si un attribut n'existe pas pour un objet, un AttributeError est levé.
Pourquoi l'erreur se produit ?
La classe MyClass est vide et ne définit aucun attribut ou méthode.
Lorsque vous utilisez getattr(obj, "name"), Python tente de récupérer un attribut nommé name sur l'objet obj, mais comme cet attribut n'existe pas, il lève une erreur.Solution 1: La fonction getattr accepte un troisième argument qui spécifie une valeur par défaut si l'attribut n'existe pas.
class MyClass: pass obj = MyClass() print(getattr(obj, "name", "Attribute not found")) # Affichera "Attribute not found"Solution 2 : Ajouter un attribut à la classe ou à l'instance :
Vous pouvez définir l'attribut name soit directement dans la classe, soit pour l'instance de l'objet.Définir name dans la classe :
class MyClass: name = "Default Name" obj = MyClass() print(getattr(obj, "name")) # Affichera "Default Name" # Définir name dans l'instance : class MyClass: pass obj = MyClass() obj.name = "Instance Name" # Ajouter dynamiquement l'attribut 'name' print(getattr(obj, "name")) # Affichera "Instance Name"
L'erreur vient du fait que vous essayez d'accéder à un attribut name qui n'existe pas dans l'objet obj de la classe MyClass. En Python, si un attribut n'existe pas pour un objet, un AttributeError est levé.
Pourquoi l'erreur se produit ?
La classe MyClass est vide et ne définit aucun attribut ou méthode.
Lorsque vous utilisez getattr(obj, "name"), Python tente de récupérer un attribut nommé name sur l'objet obj, mais comme cet attribut n'existe pas, il lève une erreur.
Solution 1: La fonction getattr accepte un troisième argument qui spécifie une valeur par défaut si l'attribut n'existe pas.
class MyClass: pass obj = MyClass() print(getattr(obj, "name", "Attribute not found")) # Affichera "Attribute not found"
Solution 2 : Ajouter un attribut à la classe ou à l'instance :
Vous pouvez définir l'attribut name soit directement dans la classe, soit pour l'instance de l'objet.
Définir name dans la classe :
class MyClass: name = "Default Name" obj = MyClass() print(getattr(obj, "name")) # Affichera "Default Name" # Définir name dans l'instance : class MyClass: pass obj = MyClass() obj.name = "Instance Name" # Ajouter dynamiquement l'attribut 'name' print(getattr(obj, "name")) # Affichera "Instance Name"
![]() |
![]() |
![]() |