You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
 

102 lines
2.4 KiB

  1. Gestion des exceptions
  2. ======================
  3. Bloc try/except
  4. ---------------
  5. On peut *gérer* (ou *attraper*) une exception en utilisant un bloc
  6. ``try/except`` et le nom d'une classe d'exception::
  7. try:
  8. a = 1 / 0
  9. except ZeroDivisionError:
  10. print("Quelqu'un a essayé de diviser par zéro!")
  11. # Affiche: Quelqu'un a essayé de diviser par zéro!
  12. À noter : le bloc dans ``try`` s'interrompt dès que l'exception est levée,
  13. et on ne passe dans le bloc ``except`` que si une exception a effectivement
  14. été levée.
  15. .. code-block:: python
  16. x = 14
  17. y = 0
  18. try:
  19. z = x / y
  20. print("z vaut", z)
  21. except ZeroDivisionError:
  22. print("Ouelqu'un a essayé de diviser par zéro!")
  23. # Affiche: Ouelqu'un a essayé de diviser par zéro!
  24. Notez que la ligne ``print("z vaut", z)`` n'as pas été exécutée.
  25. Autr exemple:
  26. .. code-block:: python
  27. x = 14
  28. y = 2
  29. try:
  30. z = x / y
  31. print("z vaut", z)
  32. except ZeroDivisionError:
  33. print("Ouelqu'un a essayé de diviser par zéro!")
  34. # Affiche: 'z vaut 7.0'
  35. Notez que la ligne ``print("Ouelqu'un a essayé de diviser par zéro!")`` n'as pas été exécutée.
  36. Gestion de plusieurs exceptions
  37. --------------------------------
  38. Le mot après ``except`` doit être celui d'une classe, et l'exception n'est gérée
  39. que si sa classe est **égale ou une fille** de celle ci.
  40. Par exemple, ceci fonctionne car ``ZeroDivisionError`` est bien une fille
  41. de la classe ``ArithmeticError``::
  42. x = 14
  43. y = 0
  44. try:
  45. z = x / y
  46. print("z vaut", z)
  47. except ArithmeticError:
  48. print("Ouelqu'un a essayé une opération impossible")
  49. On peut aussi mettre plusieurs blocs de ``except``::
  50. try:
  51. tente_un_truc_risqué()
  52. except ZeroDivisionError:
  53. print("raté : division par zéro!")
  54. except FileNotFoundError:
  55. print("raté : fichier non trouvé")
  56. Ou gérer des exception de classes différentes avec le même bloc::
  57. try:
  58. tente_un_truc_risqué()
  59. except (ZeroDivisionError, FileNotFoundError)
  60. print("raté!")
  61. Accéder à la valeur de l'exception
  62. -----------------------------------
  63. On peut récupérer l'instance de l'exception levée avec le mot-clé ``as``::
  64. try:
  65. ouvrir_fichier()
  66. except FileNotFoundError as e:
  67. print("le fichier: ", e.filename, "n'existe pa")
  68. Ici on utilise l'attribut ``filename`` de la classe ``FileNotFoundError``
  69. pour afficher un message d'erreur