280_exception.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. try:
  176. result = 10 / 0
  177. exit(1)
  178. except (ZeroDivisionError, TypeError) as e:
  179. if type(e) != ZeroDivisionError:
  180. exit(1)
  181. try:
  182. try:
  183. result = 10 / 0
  184. exit(1)
  185. except (ZeroDivisionError, 1) as e:
  186. exit(1)
  187. except (TypeError) as e:
  188. exit(1)
  189. except Exception as e:
  190. if type(e) != TypeError:
  191. exit(1)
  192. """
  193. # finally, only
  194. def finally_only():
  195. try:
  196. raise KeyError
  197. finally:
  198. x = 1
  199. try:
  200. finally_only()
  201. exit(1)
  202. except KeyError:
  203. pass
  204. def finally_only_2():
  205. x = 0
  206. try:
  207. pass
  208. finally:
  209. x = 1
  210. return x
  211. assert finally_only_2() == 1
  212. # finally, no exception
  213. def finally_no_exception():
  214. ok = False
  215. try:
  216. pass
  217. except KeyError:
  218. exit(1)
  219. finally:
  220. ok = True
  221. return ok
  222. assert finally_no_exception()
  223. # finally, match
  224. def finally_match():
  225. ok = False
  226. try:
  227. raise KeyError
  228. except KeyError:
  229. pass
  230. finally:
  231. ok = True
  232. return ok
  233. assert finally_match()
  234. # finally, no match
  235. ok = False
  236. def finally_no_match():
  237. global ok
  238. try:
  239. raise KeyError
  240. except IndexError:
  241. exit(1)
  242. finally:
  243. ok = True
  244. ok_2 = False
  245. try:
  246. finally_no_match()
  247. except KeyError:
  248. assert ok
  249. ok_2 = True
  250. assert ok_2
  251. # finally, return
  252. def finally_return():
  253. try:
  254. raise KeyError
  255. finally:
  256. return 1
  257. assert finally_return() == 1
  258. """