[Hikari-Python] Chapitre 07-02 Gestion des exceptions (exécution continue du programme par gestion des exceptions)

[Python] Chapitre 07-02 Exécution continue des programmes par gestion des exceptions

Chapitre 07-01 traitait de deux exceptions. Cependant, comme nous l'avons vu dans la section précédente, si une exception se produit, le programme se terminera sur place. Vous devez continuer à traiter ce programme ou informer l'écran qu'une exception s'est produite même si vous ne pouvez pas continuer. Cette fois, j'expliquerai la ** gestion des exceptions ** lorsqu'une exception se produit.

Description de la gestion des exceptions

Comme mentionné ci-dessus, si une exception se produit, le processus sera interrompu. Par conséquent, pour ne pas l'interrompre, il est nécessaire de ** exécuter le processus par le programme décrit à un autre endroit **. Ce type de traitement est appelé ** traitement d'exception **.

La gestion des exceptions est décrite en gros comme suit.

try:
Où vous souhaitez gérer les exceptions
except:
Où gérer les exceptions

Décrivons en fait la gestion des exceptions. Créez un fichier avec le nom de fichier samp07-02-01.py </ font> dans chap07 </ font> et entrez le code suivant S'il vous plait écrivez.

samp07-02-01.py


print('Divisez a ÷ b.')

try:
    a = int(input('Entrez la valeur de a:'))
    b = int(input('Entrez une valeur pour b:'))
    print(a / b)
except:
    print('Puisque la division par 0 a été effectuée, le processus se termine.')

[Résultat de l'exécution] </ font> Divisez a ÷ b. Entrez une valeur de a: 10 Entrez une valeur pour b: 0 Puisque la division par 0 a été effectuée, le processus se termine.

Cette fois, dans le bloc ** try: **, la division par 0 est effectuée, donc le traitement des exceptions se produit. Ensuite, il saute au bloc ** sauf: ** et le traitement dans ce bloc est effectué.

Dans le chapitre 07-01, ** try ~ catch ** n'a pas été décrit, donc le processus a été interrompu de force et un message d'erreur a été affiché en rouge, mais cette fois un processus d'exception s'est produit. Par conséquent, aucun message d'erreur n'a été émis.

De cette façon, dans except, écrivez le traitement lorsqu'une exception se produit. Cette fois, il a été généré par la ** fonction d'impression **, mais il peut être utilisé pour des choses comme "notifier le terminal de surveillance" et "demander à nouveau le traitement".

Certaines exceptions

J'ai mentionné ** sauf ** plus tôt. Cette fois, en partant du principe que «0 peut être attribué à b», «Puisque la division par 0 a été effectuée, le traitement sera terminé» a été émis dans sauf.

Mais il y a d'autres exceptions. S'il est défini sur sauf, des exceptions autres que la division par 0 peuvent se produire. Par exemple, si vous entrez par erreur un caractère au lieu d'une valeur numérique, l'erreur suivante sera générée. Il s'agit du résultat de l'exécution du programme précédent samp07-02-01.py </ font>.

[Résultat de l'exécution] </ font> Divisez a ÷ b. Entrez une valeur de a: 10 Entrez une valeur pour b: z </ font> Puisque la division par 0 a été effectuée, le processus se termine.

En regardant cela, les lettres ** 'z' ** sont à la place de ** b **. Cela ne fait pas exception à la division par 0. Il s'agit d'une exception au fait que vous placez des caractères là où vous auriez normalement à saisir des nombres.

Par conséquent, si vous définissez ** sauf **, toute exception sera traitée. Dans ce cas, il est nécessaire de préparer deux "traitement d'exception pour division par 0" et "traitement d'exception lors de la saisie de caractères". Chacun de ces éléments est une exception spécifique et vous devez effectuer une gestion des exceptions pour chacun.

Comme vous pouvez le voir sur l'URL ci-dessous, il existe quelques exceptions spécifiques.

https://docs.python.org/ja/3/library/exceptions.html#concrete-exceptions

Il existe également une description sur le site ci-dessus, mais cette fois, "Traitement des exceptions de la division par 0" est ** ZeroDivisionError , "Traitement des exceptions lors de la saisie de caractères" est ** "Lors de la saisie de caractères" La gestion des exceptions " est utilisée. Créez un fichier avec le nom de fichier samp07-02-02.py </ font> dans chap07 </ font> et entrez le code suivant S'il vous plait écrivez.

samp07-02-02.py


print('Divisez a ÷ b.')

try:
    a = int(input('Entrez la valeur de a:'))
    b = int(input('Entrez une valeur pour b:'))
    print(a / b)
except ZeroDivisionError:
#Traitement des exceptions à effectuer lorsque la valeur de b atteint 0
    print('Puisque la division par 0 a été effectuée, le processus se termine.')
except ValueError:
#Gestion des exceptions lorsque a ou b n'est pas un nombre
    print('Étant donné que des données non numériques ont été saisies, le traitement se termine.')

[Résultat d'exécution 1] </ font> Divisez a ÷ b. Entrez une valeur de a: 10 Entrez une valeur pour b: 0 Puisque la division par 0 a été effectuée, le processus se termine.

[Résultat d'exécution 2] </ font> Divisez a ÷ b. Entrez une valeur de a: 10 Entrez une valeur pour b: z Étant donné que des données non numériques ont été saisies, le traitement se termine.

Je suivrai le processus dans l'ordre. Tout d'abord, concernant l'exception en cas de division par 0, l'URL ci-dessus a la description suivante.

exception ZeroDivisionError Ceci est envoyé lorsque le deuxième argument de l'opération de division ou de reste est 0. La valeur associée est une chaîne qui indique l'opérateur et le type d'opérateur dans l'opération.

Dans le premier [Résultat d'exécution 1], 0 est attribué comme valeur de ** b **, donc une exception se produit et le traitement d'exception du côté ZeroDivisionError est effectué.

exception ValueError Il est levé lorsqu'un opérateur ou une fonction reçoit un argument du type correct mais avec une valeur incorrecte, ou dans des situations où il ne peut pas être décrit par une exception plus détaillée telle que IndexError.

Dans [Résultat d'exécution 2], «z» est attribué comme valeur de ** b **, une exception se produit car la division ne peut pas être effectuée et le traitement des exceptions du côté ValueError est effectué.

Problème de pratique

Nous avons préparé des exercices. Veuillez essayer de le résoudre. Créez le programme dans chap07 </ font>. Vous pouvez spécifier n'importe quel nom de variable que vous souhaitez. [1] [Chapitre 07-01](https://qiita.com/ko0821/items/4df28c2d6a2392f9bcb7#%E4%BE%8B%E5%A4%96%E3%83%AA%E3%82%B9%E3 % 83% 88% E3% 81% AE% E8% A6% 81% E7% B4% A0% E3% 82% 92% E8% B6% 85% E3% 81% 88% E3% 81% A6% E6% 8C % 87% E5% AE% 9A% E3% 81% 97% E3% 81% 9F% E5% A0% B4% E5% 90% 88% E3% 81% AE% E4% BE% 8B% E5% A4% 96 ) Écrit dans le programme suivant, </ font>

ls = [1, 3, 5, 7, 9]
print(ls)
i = int(input('Veuillez spécifier le numéro d'élément dans la liste ci-dessus:'))

print(ls[i])

Pour <font color = # 3333ff>, créez un programme qui déclenche le traitement des exceptions lorsque le nombre spécifié d'éléments est dépassé. De plus, veuillez le créer par la méthode en utilisant une exception spécifique. Vérifions l'exception spécifique à l'URL ci-dessus. </ font>

[Résultat de l'exécution] </ font> [1, 3, 5, 7, 9] Veuillez spécifier le numéro d'élément dans la liste ci-dessus: 5 Il est précisé au-delà des éléments de la liste.

finalement

Gardez à l'esprit que la gestion des exceptions est un moyen de créer des programmes résistants aux erreurs. La gestion des exceptions ne provoque pas d'erreurs dans le programme, assurez-vous donc de le porter pour éviter des incidents graves. Il apparaîtra fréquemment dans le futur.

Revenir à [Lien de la table des matières]

Recommended Posts