41_exception.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. try:
  2. for i in range(5):
  3. raise KeyError(i)
  4. exit(1)
  5. except KeyError:
  6. pass
  7. x = 0
  8. for i in range(5):
  9. try:
  10. for j in range(5):
  11. while True:
  12. raise KeyError(i)
  13. x += 3
  14. except KeyError:
  15. x += i
  16. assert x == 10
  17. class A:
  18. def __getitem__(self, i):
  19. raise KeyError(i)
  20. try:
  21. a = A()
  22. b = a[1]
  23. exit(1)
  24. except:
  25. pass
  26. try:
  27. a = {'1': 3, 4: None}
  28. x = a[1]
  29. exit(1)
  30. except:
  31. pass
  32. assert True
  33. def f():
  34. try:
  35. raise KeyError('foo')
  36. except A: # will fail to catch
  37. exit(1)
  38. except:
  39. pass
  40. assert True
  41. f()
  42. def f1():
  43. try:
  44. assert 1 + 2 == 3
  45. try:
  46. a = {1: 2, 3: 4}
  47. x = a[0]
  48. except A:
  49. exit(1)
  50. except B:
  51. exit(1)
  52. exit(1)
  53. try:
  54. f1()
  55. exit(1)
  56. except KeyError:
  57. pass
  58. assert True, "Msg"
  59. try:
  60. assert False, "Msg"
  61. exit(1)
  62. except AssertionError:
  63. pass
  64. def f(a: list):
  65. try:
  66. raise ValueError
  67. exit(1)
  68. except:
  69. pass
  70. a[0] = 1
  71. a = [0]
  72. f(a)
  73. assert a == [1]