Introduction
Lors de l'écriture de code en Python, vous rencontrerez souvent des erreurs. Ces erreurs peuvent être dues à des erreurs de syntaxe, à des erreurs d'exécution ou à d'autres raisons. Python fournit des outils et des techniques intégrés pour traiter ces erreurs, permettant un meilleur diagnostic et une meilleure réparation des erreurs au fur et à mesure qu'elles surviennent.
2. Exemples courants
Voici un exemple de code et des explications sur la gestion des erreurs Python.
1. Erreur de syntaxe
Une SyntaxError se produit généralement lorsque vous utilisez la mauvaise syntaxe dans votre code Python . Par exemple, le code suivant comporte une erreur de syntaxe car il manque un deux-points :
if x == 5
print("x is equal to 5")
entraînera l'erreur suivante :
File "example.py", line 1
if x == 5
^
SyntaxError: invalid syntax
Pour corriger cette erreur, ajoutez simplement deux-points à la fin de l'instruction 'if' :
if x == 5:
print("x is equal to 5")
2. Erreur de nom
Python génère une NameError lorsque vous utilisez une variable ou une fonction indéfinie dans votre code . Par exemple, le code suivant génère une NameError car la variable 'y' n'est pas définie :
x = 10
print(y)
entraînera l'erreur suivante :
Traceback (most recent call last):
File "example.py", line 2, in <module>
print(y)
NameError: name 'y' is not defined
Afin de corriger cette erreur, vous devez d'abord définir la variable 'y' :
x = 10
y = 5
print(y)
3.TypeErreur
Python lève TypeError lorsque vous utilisez des types de données incompatibles dans votre code . Par exemple, le code suivant génère une TypeError car les entiers ne peuvent pas être concaténés avec des chaînes :
x = 10
print("The value of x is " + x)
entraînera l'erreur suivante :
Traceback (most recent call last):
File "example.py", line 2, in <module>
print("The value of x is " + x)
TypeError: can only concatenate str (not "int") to str
Pour corriger cette erreur, vous devez convertir l'entier en chaîne :
x = 10
print("The value of x is " + str(x))
4. Erreur de valeur
Python génère une ValueError lorsque vous utilisez une valeur non valide dans votre code. Par exemple, le code suivant génère ValueError car la fonction 'int' ne peut pas convertir la chaîne "abc" en entier :
x = int("abc")
entraînera l'erreur suivante :
Traceback (most recent call last):
File "example.py", line 1, in <module>
x = int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
Pour corriger cette erreur, vous devez vérifier avant de convertir la chaîne en entier :
x_str = "abc"
if x_str.isdigit():
x = int(x_str)
else:
print("x_str is not a valid integer")
5. FileNotFoundError
Python lève FileNotFoundError lorsque vous essayez d'ouvrir un fichier qui n'existe pas . Par exemple, le code suivant lèvera FileNotFoundError car le fichier n'existe pas (cette partie sera partagée dans le prochain article) :
with open("example.txt", "r") as f:
contents = f.read()
entraînera l'erreur suivante :
Traceback (most recent call last):
File "example.py", line 1, in <module>
with open("example.txt", "r") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'example.txt'
Afin de corriger cette erreur, vous devez vous assurer que le fichier existe :
import os.path
filename = "example.txt"
if os.path.exists(filename):
with open(filename, "r") as f:
contents = f.read()
else:
print(f"{filename} does not exist")
6. ZeroDivisionError
Python lève ZeroDivisionError lorsque vous essayez de diviser un autre nombre par 0 . Par exemple, le code suivant génère ZeroDivisionError :
x = 10 / 0
entraînera l'erreur suivante :
Traceback (most recent call last):
File "example.py", line 1, in <module>
x = 10 / 0
ZeroDivisionError: division by zero
Pour corriger cette erreur, vous devez vous assurer que vous ne définissez pas le diviseur sur 0 :
x = 10
y = 2
if y != 0:
z = x / y
print(z)
else:
print("y cannot be 0")
7. essayez-sauf
Outre les erreurs mentionnées ci-dessus, Python fournit également une instruction "try-except" pour gérer d'autres types d'erreurs. L'instruction 'try-except' essaie d'exécuter du code et intercepte une exception si quelque chose ne va pas . Voici un exemple de code :
try:
x = int(input("Please enter a number: "))
y = 10 / x
print(y)
except ValueError:
print("Please enter a valid integer.")
except ZeroDivisionError:
print("Cannot divide by zero.")
except Exception as e:
print(f"An error occurred: {e}")
Dans le code ci-dessus, nous essayons d'abord de convertir la chaîne saisie par l'utilisateur en un entier. Si ValueError se produit, un message d'erreur est imprimé. Si le diviseur est 0, un autre message d'erreur est imprimé. Enfin, nous utilisons 'except Exception as e' pour gérer tout autre type d'erreur et afficher le message d'erreur.
8. retraçage
Python fournit également le module 'traceback' pour générer des rapports d'erreurs détaillés. 'Traceback' peut vous aider à mieux comprendre la cause des erreurs et vous guider pour les corriger. Voici un exemple de code :
import traceback
def divide(x, y):
return x / y
try:
result = divide(10, 0)
except Exception as e:
print(traceback.format_exc())
Dans le code ci-dessus, nous avons défini une fonction "diviser" pour diviser deux nombres. Nous essayons d'appeler la fonction 'divide' avec 0 comme diviseur et utilisons le module 'traceback' pour imprimer un rapport d'erreur détaillé lorsqu'une erreur se produit. L'exécution du code ci-dessus produira la sortie suivante :
Traceback (most recent call last):
File "example.py", line 7, in <module>
result = divide(10, 0)
File "example.py", line 4, in divide
return x / y
ZeroDivisionError: division by zero
Dans la sortie ci-dessus, nous pouvons voir exactement où et pourquoi l'erreur s'est produite. Cela vous aidera à mieux comprendre et corriger les erreurs. (Je pense personnellement que cette méthode est rarement utilisée dans le développement de l'Internet des objets)
9. journalisation
Enfin, Python fournit également le module 'logging' pour vous aider à consigner les erreurs et déboguer les informations . Avec la "journalisation", vous pouvez enregistrer tous les messages que vous souhaitez , y compris les messages d'erreur, les messages d'avertissement et les messages de débogage . Voici un exemple de code :
import logging
logging.basicConfig(filename="example.log", level=logging.DEBUG)
def divide(x, y):
try:
result = x / y
except ZeroDivisionError as e:
logging.error("Cannot divide by zero")
raise e
return result
result = divide(10, 0)
Dans le code ci-dessus, nous utilisons d'abord la méthode 'basicConfig' pour configurer l'enregistreur. Nous spécifions le nom du fichier journal et le niveau de journalisation. Ensuite, nous définissons une fonction 'diviser' pour diviser deux nombres. Si le diviseur est 0, nous enregistrons le message d'erreur en utilisant la méthode 'logging.error'. Enfin, nous appelons la fonction "diviser" dans la fonction principale.
L'exécution du code ci-dessus générera un fichier journal 'example.log'. Le fichier contiendra les éléments suivants :
ERROR:root:Cannot divide by zero
Traceback (most recent call last):
File "example.py", line 14, in <module>
result = divide(10, 0)
File "example.py", line 9, in divide
raise e
ZeroDivisionError: division by zero
Dans le fichier journal ci-dessus, nous pouvons voir les erreurs et les messages d'erreur qui se sont produits. Cela vous aidera à mieux suivre et résoudre les problèmes. (Je pense personnellement que cette méthode est rarement utilisée dans le développement de l'Internet des objets)
3. Points clés
En programmation informatique, la maîtrise de l'anglais est très importante, y compris, mais sans s'y limiter, la lecture de documents et la recherche d'erreurs ! Donc, la meilleure façon est d'améliorer votre anglais !