Résumé : Une erreur d'attribut NoneType se produit lorsque le type de l'objet référencé est None
. Pour gérer cette erreur, vous pouvez soit utiliser le try-except
blocs ou vous pouvez également utiliser des instructions if-else selon vos besoins.
Dans cet article, vous découvrirez les erreurs d'attribut à l'aide de nombreux scénarios/exemples où vous rencontrez de telles erreurs et comment traiter l'erreur. Alors, sans plus tarder, plongeons dans notre discussion.
❖ Erreur d'attribut
Avant d'apprendre à résoudre l'erreur d'attribut , il est important de comprendre ce qu'est une erreur d'attribut ou pourquoi rencontrons-nous une erreur d'attribut ?
Qu'est-ce qu'un attribut en Python ?
En Python, un attribut peut être considéré comme n'importe quelle propriété associée à un type particulier d'objet. Par exemple, insert
, sort
, et remove
sont quelques-uns des attributs de l'objet de type liste.
Cela nous amène à la question :qu'est-ce qu'une erreur d'attribut ?
Whenever you try to reference an invalid attribute, you get an "attribute error".
En d'autres termes, des erreurs d'attribut sont générées lorsque vous essayez d'accéder à un certain attribut d'un objet particulier, cependant, l'objet ne possède pas l'attribut appelé. Comprenons cela en référence à notre exemple précédent de l'objet list tye. Depuis insert
est un attribut de l'objet de type liste, nous ne rencontrerons aucun problème lors de l'utilisation de insert
avec une liste. Cependant, un tuple ne possède pas le insert
attribut. Par conséquent, si vous essayez de référencer le insert
attribut par rapport à un tuple, vous obtiendrez un erreur d'attribut.
Exemple :
tup = ("Square", "Rectangle", "Pentagon") tup.insert(2,'circle') print(tup)
Sortie :
AttributeError: 'tuple' object has no attribute 'insert'
Cela nous amène à la phase suivante de notre discussion où nous discuterons de l'objet "NoneType" n'a pas d'attribut "xyz" erreur.
❖ L'objet "NoneType" n'a pas d'attribut "xyz"
Il peut arriver que vous rencontriez une erreur indiquant :
AttributeError: 'NoneType' object has no attribute 'something'
Essayons de disséquer notre problème et de comprendre les scénarios qui peuvent provoquer un tel AttributeError
.
Alors, qu'est-ce que NoneType
censé signifier ?
NoneType
signifie que la classe ou l'objet auquel vous essayez d'accéder est None
. Par conséquent, chaque fois qu'il y a un appel de fonction ou une affectation concernant cet objet, il échouera ou renverra une sortie inattendue.
Vous pouvez rencontrer un tel attribute error
dans de nombreux scénarios. Jetons un coup d'œil à certains scénarios dans lesquels vous pouvez rencontrer une telle erreur.
✨ Scénario 1
x1 = None print(x1.something)
Sortie :
File "D:/PycharmProjects/Errors/attribute_error.py", line 2, in <module> print(x1.something) AttributeError: 'NoneType' object has no attribute 'something'
✨ Scénario 2
x1 = None x1.some_attribute = "Finxter"
Sortie :
Traceback (most recent call last): File "D:/PycharmProjects/Errors/attribute_error.py", line 2, in <module> x1.some_attribute = "FINXTER" AttributeError: 'NoneType' object has no attribute 'some_attribute'
✨ Scénario 3
def foo(a): if a < 0: return a y = foo(5) print(y.func())
Sortie :
Traceback (most recent call last): File "D:/PycharmProjects/Errors/attribute_error.py", line 7, in <module> print(y.func()) AttributeError: 'NoneType' object has no attribute 'func'
Explication : Dans le code ci-dessus, l'appel de fonction ne renvoie rien ou en d'autres termes, il renvoie None
et nous essayons d'accéder à un attribut inexistant de ce None
type d'objet.
✨ Solution 1 :Utiliser des instructions if-else
Pour éviter le NoneType
erreur d'attribut, vous pouvez utiliser les instructions if-else en conséquence pour éliminer ou ignorer la situation où le type d'objet renvoyé est None
.
x1 = None if x1 is not None: x1.some_attribute = "Finxter" else: print("The type of x1 is ", type(x1))
Sortie :
The type of x1 is <class 'NoneType'>
✨ Solution 2 :Utiliser des blocs try-except (Gestion des exceptions)
Une autre solution de contournement pour traiter une erreur d'attribut consiste à utiliser la gestion des exceptions, c'est-à-dire le try
et except
blocs.
Exemple :
def foo(a): if a < 0: return a x = foo(-1) y = foo(5) try: print(x) print(y.func()) # Raises an AttributeError except AttributeError: print("No such Attribute!")
Sortie :
-1 No such Attribute!
❖ Comment corriger l'erreur :l'objet "NoneType" n'a pas d'attribut "Groupe" ?
Puisque nous avons déjà discuté des raisons d'obtenir un NoneType
erreur d'attribut et les moyens de gérer ces erreurs, examinons une question très fréquemment posée basée sur notre discussion précédente.
AttributeError :l'objet "NoneType" n'a pas d'attribut "groupe"
Exemple :
import re # Search for an upper case "S" character in the beginning of a word, and print the word: txt = "The rain in Spain" for i in txt.split(): x = re.match(r"\bS\w+", i) print(x.group())
Sortie :
Traceback (most recent call last): File "D:/PycharmProjects/Errors/attribute_error.py", line 9, in <module> print(x.group()) AttributeError: 'NoneType' object has no attribute 'group'
Raison :
Le code rencontre une erreur d'attribut car lors de la première itération, il ne trouve pas de correspondance, donc x
renvoie None
. Par conséquent, lorsque nous essayons d'utiliser l'attribut pour le NoneType
objet, il renvoie une erreur d'attribut.
Solution :
Négliger group()
pour la situation où x
renvoie None
et ne correspond donc pas à la Regex. Utilisez donc le try-except
tel que l'erreur d'attribut soit gérée par le bloc except. Le code suivant clarifiera davantage les choses :
import re txt = "The rain in Spain" for i in txt.split(): x = re.match(r"\bS\w+", i) try: print(x.group()) except AttributeError: continue
Sortie :
Spain
Remarque : L'exemple ci-dessus traite de regex . Voulez-vous maîtriser la superpuissance des regex ? Découvrez notre livre La manière la plus intelligente d'apprendre les expressions régulières en Python avec l'approche innovante en 3 étapes pour un apprentissage actif :(1) étudiez un chapitre de livre, (2) résolvez un puzzle de code et (3) regardez une vidéo de chapitre éducatif.
Conclusion
Les principaux domaines abordés dans cet article étaient :
- Qu'est-ce qu'un
attribute error
? - Qu'est-ce qu'un
NoneType
erreur d'attribut ? - Les scénarios dans lesquels nous rencontrons des erreurs d'attribut.
- Méthodes pour traiter les erreurs d'attribut :
- utiliser if-else
- utiliser try-except
- Comment corriger l'erreur :l'objet "NoneType" n'a pas d'attribut "Groupe" ?
J'espère que vous avez apprécié cet article et que vous avez découvert attribute errors
. Veuillez rester à l'écoute et abonnez-vous pour des articles plus intéressants !