Python >> Tutoriel Python >  >> Python

Comment corriger l'erreur :l'objet "NoneType" n'a pas d'attribut "Groupe" ?

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 !