您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
此仓库已存档。您可以查看文件和克隆,但不能推送或创建工单/合并请求。

03-gestion.rst 2.4 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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("Ouelqu'un a essayé de diviser par zéro!")
  11. # Affiche: Ouelqu'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 ``as``::
  64. try:
  65. ounver_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