1
0

28_exception.py 2.9 KB

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