[PYTHON] Attrapez plusieurs types d'exceptions

1


import sys, traceback

number1 = 100
number2 = 'a'

print('strat')

try:
    answer = number1 / number2
    print(answer)
except ZeroDivisionError as e:
    print('Il ne cassera pas à 0.')
    sys.stderr.write(traceback.format_exc())
except NameError as e:
    print('Appeler une variable non définie')
    sys.stderr.write(traceback.format_exc())
except Exception as e:
    print('Une erreur imprévue s'est produite.')
    sys.stderr.write(traceback.format_exc())
finally:
    print('end')

Résultat d'exécution de 1


strat
Une erreur imprévue s'est produite.
end

1 erreur d'exécution


Traceback (most recent call last):
  File "Main.py", line 9, in <module>
    answer = number1 / number2
TypeError: unsupported operand type(s) for /: 'int' and 'str'

Puisque nombre2 = 'a', TypeError s'est produit.

TypeError est except ZeroDivisionError、 Il ne peut pas être capturé sauf NameError, Peut être pris avec sauf exception.

Exception est une superclasse de ZeroDivisionError et NameError. Pour le dire dans l'autre sens C'est une sous-classe de ZeroDivisionError et NameError.

L'exception peut intercepter toutes les exceptions, Les sous-classes sont une exception plus spécifique.

Lors de la capture de plusieurs exceptions Il est vérifié s'il existe un bloc except correspondant dans l'ordre à partir du haut. Pour cette raison, Il est nécessaire d'écrire à partir d'une sous-classe plus spécifique.

Autrement, Le bloc sauf exception qui intercepte toutes les exceptions Avant que les sous-classes qui peuvent intercepter des exceptions plus spécifiquement se déplacent Il attrape une exception.

2


import sys,traceback

number1 = 100
number2 = 0

print('start')

try:
    answer = number1 / number2
    print(answer)
except Exception as e:
    print('Une exception inattendue s'est produite.')
    sys.stderr.write(traceback.format_exc())
except ZeroDivisionError as e:
    print('Il ne cassera pas à 0.')
    sys.stderr.write(traceback.format_exc())
except NameError as e:
    print('Vous avez appelé une variable non définie.')
    sys.stderr.write(traceback.format_exc())
finally:
    print('end')

Résultat d'exécution de 2


strat
Une erreur imprévue s'est produite.
end

2 erreur d'exécution


Traceback (most recent call last):
  File "Main.py", line 9, in <module>
    answer = number1 / number2
ZeroDivisionError: division by zero

Je voulais sortir "0 ne casse pas", mais Parce que l'exception de superclasse attrape toute exception Le bloc except Exception a intercepté une exception.

Recommended Posts

Attrapez plusieurs types d'exceptions
Examen des exceptions
Héritage multiple de classes
Copie de plusieurs listes
Types de communication inter-processus
La vengeance des types: la vengeance des types
Somme de plusieurs tableaux numpy (somme)
Résumé des types de distribution Linux
Placement optimal de plusieurs images
Installer plusieurs versions de Python
[ev3dev × Python] Contrôle de plusieurs moteurs
J'ai résumé 11 types de systèmes d'exploitation
django-allauth gère plusieurs types d'utilisateurs à l'aide d'un utilisateur personnalisé (utilisateur multi-type)