5 erreurs Python expliquées (et comment les corriger)
Il existe de nombreux types d'erreurs en Python. Peu importe où vous en êtes dans votre parcours Python, vous avez probablement déjà rencontré une ou plusieurs de ces erreurs. Pour certaines, il peut être facile de comprendre ce qui ne va pas dans votre code. Pour d'autres ? Pas tellement. C'est pourquoi j'explique ce qu'elles signifient.
5. Erreur d'indentation
Si vous êtes un débutant absolu en Python ou que vous venez d'un langage comme le C/C++ ou Java, alors ceci sera l'erreur la plus courante à laquelle vous serez confronté. En Python, nous définissons les blocs à l'aide de l'indentation plutôt que des accolades, comme c'est le cas dans de nombreux autres langages. Un "bloc" fait référence à un segment de code qui est traité comme une unité unique. Pensez aux blocs conditionnels, à une fonction ou à une boucle.
En Python, toutes les instructions d'un bloc doivent avoir le même niveau d'indentation. Lorsque le niveau d'indentation change (soit qu'il augmente ou diminue), cela signifie le début ou la fin d'un bloc. Python dépend fortement d'une indentation cohérente. Une indentation incohérente entraînera une IndentationError.
Un scénario courant où vous pouvez rencontrer cette erreur est lorsque vous copiez-collez du code dans votre éditeur. Parfois, en raison des différences de formatage du texte entre différents éditeurs, l'indentation peut se casser d'un éditeur à l'autre.
for i in range(5):
print(i)
En copiant les lignes de code ci-dessus, l'indentation a été rompue. Tenter d'exécuter ce code produira une IndentationError. Pour corriger cela, vous devez indenter les instructions de manière cohérente sous leur bloc.
for i in range(5):
print(i)
Un autre problème que vous pourriez rencontrer lié à cette erreur est l'utilisation des tabulations et des espaces. Certains éditeurs utilisent des tabulations tandis que d'autres utilisent quatre espaces pour l'indentation. Si vous les mélangez dans votre code, vous obtiendrez une erreur. Celle-ci est encore plus déroutante car il est difficile de voir à l'œil nu quelle ligne contient des tabulations et laquelle contient des espaces.
4. Erreur de syntaxe
Chaque langage de programmation a une syntaxe. En d'autres termes, un ensemble de règles que vous devez suivre pour écrire du code dans ce langage. Donc, si vous enfreignez l'une de ces règles, le langage ne sait pas ce que vous essayez de faire et vous renvoie une erreur de syntaxe.
En Python, une SyntaxError se produit lorsque l'interpréteur rencontre du code qui ne respecte pas les règles du langage Python. Cela signifie que le code est structuré d'une manière que Python ne peut pas comprendre ou exécuter. Une SyntaxError empêchera votre programme de démarrer. Parmi les erreurs de syntaxe les plus courantes que vous rencontrerez en Python, on trouve :
- Oublier une ponctuation (oublier les deux-points (:) lors du démarrage d'un bloc de code, comme les conditionnelles, les boucles ou les fonctions.)
- Faute d'orthographe ou mauvais placement d'un mot-clé Python (écrire
esleau lieu deelse, utiliser une instructionbreaklà où elle ne devrait pas apparaître.) - Utiliser des mots-clés réservés comme noms de variables.
- Mauvaise utilisation des opérateurs (utiliser l'opérateur d'affectation (=) alors que vous êtes censé utiliser l'opérateur d'égalité (==) dans une instruction.)
- Oublier de fermer une parenthèse ou une citation. Cela arrive souvent lorsque vous travaillez avec plusieurs expressions et qu'elles sont à l'intérieur de parenthèses imbriquées.
La bonne nouvelle est que l'interpréteur Python est suffisamment intelligent pour identifier le type d'erreur de syntaxe que vous avez commise et indiquer le numéro de ligne, ainsi que la position approximative de l'erreur. Cependant, parfois, le message d'erreur peut être un peu ambigu et ne pas refléter la cause exacte. Si vous utilisez un bon éditeur de code ou un IDE, il peut alors suggérer l'erreur et les corrections possibles.
3. Erreur d'index
Python offre plusieurs structures de données intégrées telles que les listes, les tuples et les ensembles. Nous avons souvent besoin de parcourir ces structures de données et d'accéder aux éléments. Chaque structure de données contient quelque chose appelé un index, qui est la position d'un élément spécifique dans cette structure.
numbers = [1, 2, 3]
Ici, nous avons une liste appelée nombres. La façon dont nous pouvons accéder aux éléments de la liste est à travers leurs indices, comme ceci :
print(numbers[1]) # prints 2
IndexError se produit couramment lorsque vous essayez d'accéder à un élément dans une structure de données (également appelée séquence) à un indice qui est en dehors de la plage valide des indices pour cette structure. Dans de nombreux langages de programmation, y compris Python, l'indice commence à zéro. Ainsi, si une séquence contient N éléments, la plage des indices va de 0 à N-1.
Souvent, les programmeurs oublient de gérer ce cas d'indexation basée sur zéro et tombent dans une erreur d'indice décalé d'une unité, ce qui provoque une erreur d'index. Pour éviter les erreurs d'index, mesurez toujours la longueur de votre séquence.
if index < len(my_list):
# execute code
Lorsqu'on parcourt une séquence, une erreur courante en Python que de nombreux programmeurs commettent est de la modifier également. Cela provoque également une erreur d'index. Il faut donc éviter de le faire.
2. Erreur de valeur
Python propose de nombreux types de données. Lorsque l'on travaille avec différents types de données, nous devons gérer différentes valeurs littérales. Parfois, nous les utilisons comme arguments de fonction. Ce que nous devons savoir, c'est que chaque fonction a un type de donnée attendu comme argument. Lorsqu'elle reçoit cette donnée, la fonction vérifie également si la valeur qu'elle a reçue est valide.
Et cela entraîne le ValueError en Python. C'est une exception intégrée qui est levée lorsqu'une fonction ou une opération reçoit un argument qui a le bon type de données mais une valeur inappropriée. Cela signifie que le type de l'argument est acceptable, mais que sa valeur spécifique n'est pas valide pour l'opération effectuée.
Un cas assez fréquent pour cela est lorsque vous souhaitez convertir un type de données en un autre.
int('10')
Cela convertit la chaîne '10' en entier 10. Mais, si vous faites ceci :
int('ten')
Vous obtenez une erreur de valeur. C'est parce que la fonction int() attend un argument de type chaîne de caractères. Mais cette valeur en chaîne doit être composée de chiffres. C'est la raison pour laquelle 'ten' est une valeur inacceptable. De même, vous pouvez obtenir cette erreur lors de l'exécution d'opérations mathématiques.
import math
math.sqrt(-5)
La fonction sqrt() attend un nombre positif. Ainsi, un nombre négatif en tant qu'argument entraînera une erreur de valeur. Un autre scénario courant de rencontre d'erreurs de valeur est lorsque vous prenez une entrée utilisateur. Comme vous n'avez aucun contrôle sur ce que l'utilisateur peut saisir, taper une valeur incorrecte entraînera une erreur.
La meilleure façon de gérer ValueError est d'utiliser des blocs try-except.
try:
num = input("Enter a number: ")
num_int = int(num)
except ValueError as e:
print(f"Caught a ValueError: {e}")
De cette façon, vous pouvez éviter les plantages du programme même si l'utilisateur saisit une valeur incorrecte.
1. Erreur d'attribut
L'AttributeError est une exception courante en Python qui se produit lorsque vous essayez d'accéder à un attribut ou une méthode qui n'existe pas sur un objet particulier. En termes simples, cela signifie que vous demandez à un objet de faire quelque chose pour lequel il n'est pas conçu.
Que vous travailliez avec des chaînes de caractères, des listes ou des classes personnalisées, il est facile de supposer qu'un objet possède certaines propriétés ou capacités, surtout lorsque vous passez d'un type de données à un autre. Cependant, Python déclenchera une AttributeError dès que vous tenterez d'appeler un attribut qui n'est pas disponible.
text = "hello world"
print(text.push())
Les chaînes n'ont aucune méthode push(). Donc, dans l'exemple ci-dessus, vous obtiendrez une erreur d'attribut. Voici un autre exemple :
user = None
print(user.name)
Essayer d'accéder à l'attribut 'name' sur un objet de type NoneType entraînera également cette erreur. Dans tous ces cas, l'objet avec lequel vous travaillez ne prend tout simplement pas en charge l'attribut auquel vous essayez d'accéder. Pour éviter que cette erreur n'interrompe votre programme, envisagez de vérifier les types d'objets.
type(obj) # or
isinstance()
La fonction intégrée dir() révèle tous les attributs et méthodes valides disponibles sur un objet. L'utiliser sur votre objet vous permettra de savoir quels attributs vous pouvez utiliser.
Python étant un langage facile, il est assez simple d'apprendre les bases du langage. Maintenant que vous connaissez certains des erreurs courantes, vous serez capable de les déboguer et d'écrire un code plus Pythonique sans aucun souci.




