raise.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. def raise_1():
  2. try:
  3. # {}['k'] # ошибка key error
  4. [1, 2, 3][14] # ошибка index error
  5. except (KeyError, IndexError) as error:
  6. print(f'Logging error: {repr(error)}')
  7. raise TypeError("raise TypeError!!!") from None
  8. except ZeroDivisionError as err:
  9. print('ZeroDevisionError')
  10. print(f'Logging error: {err} {repr(err)}')
  11. def raise_2():
  12. a = TypeError("Ошибка типа")
  13. print(a.args)
  14. raise a
  15. def raise_3():
  16. try:
  17. raise ValueError('ошибка значения')
  18. except ValueError as first:
  19. try:
  20. raise TypeError('ошибка типа')
  21. except TypeError as second:
  22. raise Exception('Большое исключение') from first
  23. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. def function_1():
  25. try:
  26. x = 1/0
  27. print('The end')
  28. except ZeroDivisionError:
  29. print("Can't divide by zero")
  30. raise ValueError("Oops, something went wrong")
  31. def function_2():
  32. try:
  33. function_1()
  34. except ValueError as e:
  35. print("ValueError cauth:", e)
  36. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  37. class Customer:
  38. def __init__(self, name, balance=0):
  39. self.name = name
  40. self.balance= balance
  41. @staticmethod
  42. def check_type(value):
  43. if not isinstance(value, (int, float)):
  44. raise TypeError('Банк работает только с числами')
  45. def withdraw(self, value):
  46. Customer.check_type(value)
  47. if self.balance < value:
  48. raise ValueError('Сумма списания превышает баланс')
  49. else:
  50. self.balance -= value
  51. def deposit(self, value):
  52. Customer.check_type(value)
  53. self.balance += value
  54. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  55. def sum_numbers(numbers: list[int]):
  56. if not isinstance(numbers, list):
  57. raise TypeError("Аргумент numbers должен быть списком")
  58. if not numbers:
  59. raise ValueError("Пустой список")
  60. for elem in numbers:
  61. if not isinstance(elem, (int, float)):
  62. raise TypeError('Неправильный тип элемента')
  63. return sum(numbers)
  64. def main():
  65. for value in (True, (1, 2, 3), {1: 'hello'}, {1, 2, 3}):
  66. try:
  67. result = sum_numbers(value)
  68. except TypeError as error:
  69. print(error)
  70. try:
  71. result = sum_numbers([])
  72. except ValueError as error:
  73. print(error)
  74. try:
  75. sum_numbers([1, 'hello', 2, 3])
  76. except TypeError as error:
  77. print(error)
  78. try:
  79. sum_numbers([1, 2, 3, 4, 5, [1, 2, 3]])
  80. except TypeError as error:
  81. print(error)
  82. try:
  83. sum_numbers([1, 2, 3, 4, 5, {1, 2, 3}])
  84. except TypeError as error:
  85. print(error)
  86. try:
  87. sum_numbers([1, 2, 3, 4, 5, (1, 2, 3)])
  88. except TypeError as error:
  89. print(error)
  90. assert sum_numbers([1, 2, 3, 4, 5]) == 15
  91. assert sum_numbers([1, 2, 3, 4, 5.0]) == 15.0
  92. # raise_1()
  93. # raise_2()
  94. # raise_3()
  95. # function_2()
  96. # cus = Customer('user, 110')
  97. # cus.check_type()
  98. # my_list = [1, 2, 'asfadsf']
  99. # empty_list = []
  100. # sum_numbers(my_list)
  101. # sum_numbers(empty_list)
  102. '''
  103. assert Customer.check_type(2) is None, 'Метод check_type не должен ничего возращать'
  104. assert Customer.check_type(2.5) is None, 'Метод check_type не должен ничего возращать'
  105. for i in ['hello', [1, 2, 3], dict(), set()]:
  106. try:
  107. Customer.check_type(i)
  108. except TypeError as error:
  109. print(error)
  110. else:
  111. raise TypeError(f'Метод check_type должен вызывать ошибку если передать {i}')
  112. bob = Customer('Bob Odenkirk')
  113. assert bob.balance == 0
  114. assert bob.name == 'Bob Odenkirk'
  115. try:
  116. bob.deposit('hello')
  117. except TypeError as error:
  118. print(error)
  119. else:
  120. raise ValueError("Нельзя вносить на счет баланса строку")
  121. try:
  122. bob.deposit([])
  123. except TypeError as error:
  124. print(error)
  125. else:
  126. raise ValueError("Нельзя вносить на счет баланса список")
  127. bob.deposit(200)
  128. assert bob.balance == 200
  129. try:
  130. bob.withdraw(300)
  131. except ValueError as e:
  132. print(e)
  133. else:
  134. raise ValueError("Проверьте списание при превышении лимита")
  135. bob.withdraw(150)
  136. assert bob.balance == 50
  137. terk = Customer('Terk', 1000)
  138. assert terk.name == 'Terk'
  139. assert terk.balance == 1000
  140. terk.withdraw(999)
  141. assert terk.balance == 1, 'Не списались деньги, проверяйте списание'
  142. terk.withdraw(1)
  143. assert terk.balance == 0, 'Не списались деньги, проверяйте списание'
  144. try:
  145. terk.withdraw(1)
  146. except ValueError as e:
  147. print(e)
  148. else:
  149. raise ValueError("Проверьте списание при превышении лимита")
  150. assert terk.balance == 0
  151. '''
  152. if __name__ == '__main__':
  153. main()