28_exception.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. # finally, only
  126. def finally_only():
  127. try:
  128. raise KeyError
  129. finally:
  130. x = 1
  131. try:
  132. finally_only()
  133. exit(1)
  134. except KeyError:
  135. pass
  136. def finally_only_2():
  137. x = 0
  138. try:
  139. pass
  140. finally:
  141. x = 1
  142. return x
  143. assert finally_only_2() == 1
  144. # finally, no exception
  145. def finally_no_exception():
  146. ok = False
  147. try:
  148. pass
  149. except KeyError:
  150. exit(1)
  151. finally:
  152. ok = True
  153. return ok
  154. assert finally_no_exception()
  155. # finally, match
  156. def finally_match():
  157. ok = False
  158. try:
  159. raise KeyError
  160. except KeyError:
  161. pass
  162. finally:
  163. ok = True
  164. return ok
  165. assert finally_match()
  166. # finally, no match
  167. ok = False
  168. def finally_no_match():
  169. global ok
  170. try:
  171. raise KeyError
  172. except IndexError:
  173. exit(1)
  174. finally:
  175. ok = True
  176. ok_2 = False
  177. try:
  178. finally_no_match()
  179. except KeyError:
  180. assert ok
  181. ok_2 = True
  182. assert ok_2
  183. # finally, return
  184. def finally_return():
  185. try:
  186. raise KeyError
  187. finally:
  188. return 1
  189. assert finally_return() == 1