28_exception.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. def f():
  2. raise IndexError
  3. try:
  4. f()
  5. exit(1)
  6. except IndexError:
  7. pass
  8. k = KeyError('foo')
  9. assert str(k) == "'foo'"
  10. try:
  11. assert False
  12. exit(1)
  13. except AssertionError:
  14. pass
  15. try:
  16. raise 1
  17. except TypeError:
  18. pass
  19. try:
  20. for i in range(5):
  21. raise KeyError(i)
  22. exit(1)
  23. except KeyError:
  24. pass
  25. x = 0
  26. for i in range(5):
  27. try:
  28. for j in range(5):
  29. while True:
  30. raise KeyError(i)
  31. x += 3
  32. except KeyError:
  33. x += i
  34. assert x == 10
  35. class A:
  36. def __getitem__(self, i):
  37. raise KeyError(i)
  38. try:
  39. a = A()
  40. b = a[1]
  41. exit(1)
  42. except KeyError:
  43. pass
  44. try:
  45. a = {'1': 3, 4: None}
  46. x = a[1]
  47. exit(1)
  48. except:
  49. pass
  50. assert True
  51. def f():
  52. try:
  53. raise KeyError('foo')
  54. except IndexError: # will fail to catch
  55. exit(1)
  56. except:
  57. pass
  58. assert True
  59. f()
  60. def f1():
  61. try:
  62. assert 1 + 2 == 3
  63. try:
  64. a = {1: 2, 3: 4}
  65. x = a[0]
  66. except RuntimeError:
  67. exit(1)
  68. except IndexError:
  69. exit(1)
  70. exit(1)
  71. try:
  72. f1()
  73. exit(1)
  74. except KeyError:
  75. pass
  76. assert True, "Msg"
  77. try:
  78. assert False, "Msg"
  79. exit(1)
  80. except AssertionError:
  81. pass
  82. def f(a: list):
  83. try:
  84. raise ValueError
  85. exit(1)
  86. except:
  87. pass
  88. a[0] = 1
  89. a = [0]
  90. f(a)
  91. assert a == [1]
  92. try:
  93. a = [][3]
  94. except IndexError as e:
  95. # assert str(e) == '3 not in [0, 0)'
  96. assert repr(e).startswith('IndexError(')
  97. try:
  98. a = {}[2]
  99. except IndexError as e:
  100. exit(1)
  101. except Exception as e:
  102. assert type(e) is KeyError
  103. assert str(e) == '2'
  104. assert repr(e).startswith('KeyError(')
  105. except:
  106. exit(1)
  107. class MyException(Exception):
  108. pass
  109. class MyException2(MyException):
  110. pass
  111. try:
  112. raise MyException2
  113. except MyException as e:
  114. ok = True
  115. except Exception:
  116. exit(1)
  117. assert ok
  118. ok = False
  119. try:
  120. eval('1+')
  121. except SyntaxError as e:
  122. assert type(e) is SyntaxError
  123. ok = True
  124. assert ok
  125. # nested try
  126. def g():
  127. try:
  128. raise KeyError
  129. except KeyError:
  130. pass
  131. try:
  132. raise IndexError
  133. except IndexError:
  134. g()
  135. a = 1 + 2
  136. """
  137. # finally, only
  138. def finally_only():
  139. try:
  140. raise KeyError
  141. finally:
  142. x = 1
  143. try:
  144. finally_only()
  145. exit(1)
  146. except KeyError:
  147. pass
  148. def finally_only_2():
  149. x = 0
  150. try:
  151. pass
  152. finally:
  153. x = 1
  154. return x
  155. assert finally_only_2() == 1
  156. # finally, no exception
  157. def finally_no_exception():
  158. ok = False
  159. try:
  160. pass
  161. except KeyError:
  162. exit(1)
  163. finally:
  164. ok = True
  165. return ok
  166. assert finally_no_exception()
  167. # finally, match
  168. def finally_match():
  169. ok = False
  170. try:
  171. raise KeyError
  172. except KeyError:
  173. pass
  174. finally:
  175. ok = True
  176. return ok
  177. assert finally_match()
  178. # finally, no match
  179. ok = False
  180. def finally_no_match():
  181. global ok
  182. try:
  183. raise KeyError
  184. except IndexError:
  185. exit(1)
  186. finally:
  187. ok = True
  188. ok_2 = False
  189. try:
  190. finally_no_match()
  191. except KeyError:
  192. assert ok
  193. ok_2 = True
  194. assert ok_2
  195. # finally, return
  196. def finally_return():
  197. try:
  198. raise KeyError
  199. finally:
  200. return 1
  201. assert finally_return() == 1
  202. """