28_exception.py 2.8 KB

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