Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
To repozytorium jest zarchiwizowane. Możesz wyświetlać pliki i je sklonować, ale nie możesz do niego przepychać zmian lub otwierać zgłoszeń/Pull Requestów.

python-10.md 2.8 KiB

5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
5 lat temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. % Programmation avec Python (chapitre 10)
  2. % Dimitri Merejkowsky
  3. #
  4. \center \huge Exceptions
  5. # Examples d'erreurs
  6. * division par zéro
  7. * dépassement d'un tableau
  8. * clé non trouvée dans un dico
  9. * opération entre types incompatibles
  10. * le fichier n'existe pas
  11. * la variable n'existe pas
  12. # Les backtraces
  13. ```python
  14. def une_fonction():
  15. return 1 / 0
  16. def une_autre_fonction():
  17. une_fonction()
  18. une_autre_fonction()
  19. ```
  20. # Les backtraces
  21. ```
  22. Traceback (most recent call last):
  23. File "foo.py", line 7, in <module>
  24. une_autre_fonction()
  25. File "foo.py", line 5, in une_autre_fonction
  26. une_fonction()
  27. File "foo.py", line 2, in une_fonction
  28. return 1 / 0
  29. ZeroDivisionError: division by zero
  30. ```
  31. # Les backtraces
  32. ```python
  33. def une_fonction(diviseur):
  34. return 1 / diviseur
  35. def une_autre_fonction():
  36. une_fonction(diviseur=0)
  37. une_autre_fonction()
  38. ```
  39. # Les backtraces
  40. ```
  41. Traceback (most recent call last):
  42. File "foo.py", line 7, in <module>
  43. une_autre_fonction()
  44. File "foo.py", line 5, in une_autre_fonction
  45. une_fonction(diviseur=0)
  46. File "foo.py", line 2, in une_fonction
  47. return 1 / diviseur
  48. ZeroDivisionError: division by zero
  49. ```
  50. # Lever une exception
  51. ```python
  52. def retirer_somme(compte, montant):
  53. solde = ...
  54. if montant >= solde:
  55. raise ValueError("montant supérieur au solde!")
  56. ```
  57. # Attraper une exception
  58. ```python
  59. try:
  60. a = 1 / 0
  61. this_will_never_happen()
  62. except ZeroDivisionError:
  63. print("someone tried to divide by zero!")
  64. ```
  65. * Note: si l'exception n'est pas une fille de la classe attrapee, c'est rate.
  66. # Attraper une exception
  67. * On peut mettre plusieurs blocs de `except`
  68. * On peut attraper plusieurs exceptions d'un coup
  69. # Attraper une exception
  70. ```python
  71. try:
  72. something_dangerous()
  73. except ZeroDivisionError:
  74. print("tried to devide by zero")
  75. except FileNotFoundError:
  76. print("file not found")
  77. ```
  78. Attention aux bare except
  79. # Hiérarchies
  80. À connaître
  81. À utiliser si vous faites une librairie.
  82. # finally, else
  83. # WBYL et EAFP
  84. Watch Before You Leap
  85. Easier to Ask for Forgiveness than Permission
  86. fichiers encore:
  87. ```python
  88. if exists():
  89. if pas_un_dossier():
  90. if j_ai_les_droits_en_lecture():
  91. open(filename):
  92. ```
  93. ```python
  94. try:
  95. open(filename):
  96. catch IOError:
  97. ...
  98. ```
  99. # avec with
  100. # attention a ou vous mettez except
  101. ```python
  102. if truc:
  103. if machin:
  104. for bidule in chose:
  105. raise MyError("kaboom!")
  106. ````
  107. ```python
  108. if truc:
  109. if machin:
  110. try:
  111. for bidule in chose:
  112. raise MyError("kaboom!")
  113. except:
  114. ...
  115. ```
  116. ```python
  117. if truc:
  118. try:
  119. if machin:
  120. for bidule in chose:
  121. raise MyError("kaboom!")
  122. except:
  123. ...
  124. ````
  125. # Accédér aux détails de l'exceptions
  126. * Avec `as`
  127. * Attrribut `args`
  128. * Parfois d'autres atttributs (voir la doc)