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