Cours de base Python (11 exceptions)

Quelles sont les exceptions?

S'il y a une erreur dans le code et qu'une erreur se produit lorsque vous [compilez] le programme (http://e-words.jp/w/E382B3E383B3E38391E382A4E383AB.html), cela s'appelle une "erreur de compilation". Même si la compilation se termine normalement, si quelque chose ne va pas pendant l'exécution, on l'appelle une exception. Dans mon article, j'utilisais le mot «erreur» pour exprimer «exception» afin que le sens puisse être transmis. Dorénavant, nous utiliserons le mot correct «exception».

Les exceptions introduites dans les articles précédents étaient les suivantes.

Une autre exception bien connue est le code qui divise un nombre par 0 et le divise par zéro.

division_by_zero.py


a = 10 / 0
print("{0}".format(a))

Le programme ci-dessus ne génère pas d'erreur au moment de la compilation, mais déclenche une exception au moment de l'exécution comme indiqué ci-dessous.

ZeroDivisionError: integer division or modulo by zero

L'écriture «si une exception se produit» dans le code où une exception peut se produire est appelée gestion des exceptions.

Attraper des exceptions

Je ne veux pas que le programme se ferme soudainement pendant son exécution. Par conséquent, modifiez le programme de division zéro écrit ci-dessus afin qu'une exception ne se produise pas au moment de l'exécution.

division_by_zero2.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ZeroDivisionError:
    print("ZeroDivisionError!!")

Insérez le code qui peut provoquer une exception dans ** try: **. Ensuite, entourez le traitement lorsqu'une exception se produit avec ** sauf * type d'exception *: **. Le "type d'exception" doit être approprié. Par exemple, dans le programme ci-dessus, au lieu de ZeroDivisionError (= exception de division zéro) Si vous spécifiez ValueError (= une exception qui stocke une valeur qui ne correspond pas au type de la variable) comme indiqué ci-dessous, l'exception ne sera pas interceptée.

division_by_zero_EXCEPTION2.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ValueError:
    print("ZeroDivisionError!!")

J'obtiens une exception lorsque j'exécute le programme ci-dessus.

Utilisation des informations sur les exceptions

Dans le programme précédent, lorsqu'une exception s'est produite, j'ai créé un message à afficher par moi-même, Ceci est disponible car Python conserve les informations lorsqu'une exception se produit. Essayez d'exécuter le programme suivant.

py3.division_by_zero_info.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ZeroDivisionError as e:
    print("type:{0}".format(type(e)))
    print("args:{0}".format(e.args))
    print("message:{0}".format(e.message))
    print("{0}".format(e))

Vous pouvez définir une variable avec des informations d'erreur en écrivant ** exception * type d'exception * comme * variable *: **. Le résultat de sortie est le suivant. Vous souhaiterez peut-être les afficher au lieu de vos propres messages.

type:<type 'exceptions.ZeroDivisionError'> args:('integer division or modulo by zero',) message:integer division or modulo by zero integer division or modulo by zero

Attrapez plusieurs exceptions

Comme je l'ai mentionné plus tôt, le «type d'exception» doit être décrit de manière appropriée, mais il existe plusieurs modèles d'exceptions. Si cela se produit, vous pouvez en écrire plusieurs comme la branche elif.

try:
	f = open(file_name,'w')
	data = dict_input['data']
	f.write(data)
	f.close()
except KeyError:
	print('Clé introuvable')
except (FileNotFoundError, TypeError) :
	print('Le fichier n'a pas pu être ouvert')
except:
	print('Une sorte d'erreur s'est produite')

Cela fait partie du traitement du programme qui ouvre le fichier, mais l'entrée et la sortie du fichier sont Comme il n'est pas expliqué dans le "Cours de base Python", l'explication détaillée du code est omise. Regardez les ** sauf KeyError **, ** sauf (FileNotFoundError, TypeError) **, ** except ** parts. Si une exception se produit dans la clause try, Python vérifie d'abord si l'exception peut être interceptée avec une KeyError. Si possible, indiquez «Clé introuvable». S'il ne peut pas être intercepté par KeyError, vérifiez s'il peut être intercepté par FileNotFoundError ou TypeError. Supplément Si possible, affichez "Le fichier n'a pas pu être ouvert". De cette manière, il est possible d'effectuer le même traitement pour plusieurs exceptions. S'il ne parvient toujours pas à attraper, le dernier sauf signifie «toutes les exceptions». Il a la même signification que l'autre d'une branche. Lorsqu'il atteint ce point, il affiche "Une erreur s'est produite".

Si vous préparez seulement sauf: sans écrire plusieurs exceptions, toutes les exceptions seront interceptées, mais Si vous interceptez toutes les exceptions avec la même clause except, il sera difficile de comprendre la cause de l'exception. C'est une bonne idée d'écrire chaque type d'exception, puis d'écrire sauf: à la fin.

else/finally else exécute le processus "lorsque le processus avance jusqu'à la fin sans exception dans la clause try". exécute enfin le processus "enfin, indépendamment de l'occurrence d'une exception".

try_else_finally.py


try:
    a = 10 / 0
#    a = 10 / 1
    print("{0}".format(a))
except ZeroDivisionError as e:
    print("ZeroDivisionError!!")
else:
    print("else statement")
finally:
    print("finally statement")

Exécutez le programme ci-dessus. Puis commentez a = 10/0 et décommentez a = 10/1 ci-dessous. Essayez à nouveau et assurez-vous que les deux sorties sont comme décrit.

raise Vous pouvez utiliser lever pour déclencher délibérément une exception. ** lever ** * Décrivez l'exception que vous souhaitez lever (exception que vous souhaitez envoyer) * à l'endroit où vous souhaitez lever l'exception. Renvoie une exception en écrivant lever dans la clause except. Après avoir exécuté le programme suivant, commentez lever dans la clause except et vérifiez la différence de fonctionnement entre les deux.

raise.py


try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    raise

Cela conclut l'explication de l'exception.

Suivant: Cours de base Python (12 fonctions)

Recommended Posts

Cours de base Python (11 exceptions)
Cours de base Python (12 fonctions)
Cours de base Python (7 dictionnaire)
Cours de base Python (2 installation Python)
Cours de base Python (9 itérations)
Cours de base Python (6 sets)
Cours de base Python (Introduction)
Cours de base Python (13 cours)
Cours de base Python (8 branches)
Cours de base Python (3 Exécution de Python)
Cours de base Python (10 notation d'inclusion)
Cours de base Python (5 List Taple)
Cours de base Python (1 Qu'est-ce que Python)
Cours de base Python (14 modules et packages)
RF Python Basic_01
Écriture de base Python
Grammaire de base Python3
RF Python Basic_02
Cours de base Python (à la fin de 15)
Cours de base Python (4 types numériques / type chaîne de caractères)
Édition de base Python Memo
Tri de base en Python
[python] méthode de base de la classe
Aide-mémoire Python3 (basique)
Grammaire de base Python (divers)
Mémorandum de base Python partie 2
python basic ② sous windows
Mémo de base Python - Partie 2
Notes de commande de base Python
Connaissance de base de Python
Mémo de grammaire de base Python
Mémo de base Python - Partie 1
mémorandum python super basique
Instruction if de base Python
Python Basic --Pandas, Numpy-
Grammaire de base du système Python3 (quelques itérations de Python)
Application Python: Pandas Partie 1: Basique
Refactoring appris avec Python (Basic)
Authentification BASIC avec bouteille Python
Ordre de tri des dict de base Python
[Python] Utilisation d'OpenCV avec Python (basique)
Installation de Python et grammaire de base
Mémo de grammaire de base Python (1)
Grammaire de base Python (divers) Mémo (3)
Grammaire de base Python (divers) Mémo (2)
Grammaire de base Python pour les débutants
[Python] [SQLite3] Exploiter SQLite avec Python (basique)
Utilisation basique de la f-string Python
J'ai appris la grammaire de base de Python
Grammaire de base Python (divers) Mémo (4)
Installation de Python (Python 3.7.7) et grammaire de base
Comparaison de la grammaire de base entre Java et Python
Python
Scraping avec Selenium en Python (Basic)
Cours Python pour la science des données - techniques utiles
[Python] Connaissances de base utilisées dans AtCoder
Type spécifié en python. Lancer des exceptions