28_exception.py 2.7 KB

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