1
0

28_exception.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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 = []
  136. for i in range(10):
  137. a.append(i)
  138. try:
  139. try:
  140. if i % 2 == 0:
  141. raise KeyError(i)
  142. else:
  143. raise IndexError(i)
  144. except KeyError as e:
  145. assert i % 2 == 0
  146. assert e.args[0] == i
  147. raise
  148. except IndexError as e:
  149. assert i % 2 == 1
  150. assert e.args[0] == i
  151. raise
  152. except Exception as e:
  153. assert e.args[0] == i
  154. assert a == list(range(10))
  155. # inner exc
  156. x = 0
  157. try:
  158. try:
  159. [][1]
  160. except:
  161. raise KeyError
  162. except KeyError:
  163. x = 5
  164. assert x == 5
  165. a = []
  166. for i in range(6):
  167. try:
  168. [][1]
  169. except IndexError:
  170. if i == 2:
  171. continue
  172. else:
  173. a.append(i)
  174. assert a == [0, 1, 3, 4, 5]
  175. """
  176. # finally, only
  177. def finally_only():
  178. try:
  179. raise KeyError
  180. finally:
  181. x = 1
  182. try:
  183. finally_only()
  184. exit(1)
  185. except KeyError:
  186. pass
  187. def finally_only_2():
  188. x = 0
  189. try:
  190. pass
  191. finally:
  192. x = 1
  193. return x
  194. assert finally_only_2() == 1
  195. # finally, no exception
  196. def finally_no_exception():
  197. ok = False
  198. try:
  199. pass
  200. except KeyError:
  201. exit(1)
  202. finally:
  203. ok = True
  204. return ok
  205. assert finally_no_exception()
  206. # finally, match
  207. def finally_match():
  208. ok = False
  209. try:
  210. raise KeyError
  211. except KeyError:
  212. pass
  213. finally:
  214. ok = True
  215. return ok
  216. assert finally_match()
  217. # finally, no match
  218. ok = False
  219. def finally_no_match():
  220. global ok
  221. try:
  222. raise KeyError
  223. except IndexError:
  224. exit(1)
  225. finally:
  226. ok = True
  227. ok_2 = False
  228. try:
  229. finally_no_match()
  230. except KeyError:
  231. assert ok
  232. ok_2 = True
  233. assert ok_2
  234. # finally, return
  235. def finally_return():
  236. try:
  237. raise KeyError
  238. finally:
  239. return 1
  240. assert finally_return() == 1
  241. """