|
@@ -0,0 +1,195 @@
|
|
|
+
|
|
|
+def raise_1():
|
|
|
+ try:
|
|
|
+ # {}['k'] # ошибка key error
|
|
|
+ [1, 2, 3][14] # ошибка index error
|
|
|
+ except (KeyError, IndexError) as error:
|
|
|
+ print(f'Logging error: {repr(error)}')
|
|
|
+ raise TypeError("raise TypeError!!!") from None
|
|
|
+ except ZeroDivisionError as err:
|
|
|
+ print('ZeroDevisionError')
|
|
|
+ print(f'Logging error: {err} {repr(err)}')
|
|
|
+
|
|
|
+
|
|
|
+def raise_2():
|
|
|
+ a = TypeError("Ошибка типа")
|
|
|
+ print(a.args)
|
|
|
+ raise a
|
|
|
+
|
|
|
+def raise_3():
|
|
|
+ try:
|
|
|
+ raise ValueError('ошибка значения')
|
|
|
+ except ValueError as first:
|
|
|
+ try:
|
|
|
+ raise TypeError('ошибка типа')
|
|
|
+ except TypeError as second:
|
|
|
+ raise Exception('Большое исключение') from first
|
|
|
+
|
|
|
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
+
|
|
|
+def function_1():
|
|
|
+ try:
|
|
|
+ x = 1/0
|
|
|
+ print('The end')
|
|
|
+ except ZeroDivisionError:
|
|
|
+ print("Can't divide by zero")
|
|
|
+ raise ValueError("Oops, something went wrong")
|
|
|
+
|
|
|
+def function_2():
|
|
|
+ try:
|
|
|
+ function_1()
|
|
|
+ except ValueError as e:
|
|
|
+ print("ValueError cauth:", e)
|
|
|
+
|
|
|
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
+
|
|
|
+class Customer:
|
|
|
+
|
|
|
+ def __init__(self, name, balance=0):
|
|
|
+ self.name = name
|
|
|
+ self.balance= balance
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def check_type(value):
|
|
|
+ if not isinstance(value, (int, float)):
|
|
|
+ raise TypeError('Банк работает только с числами')
|
|
|
+
|
|
|
+ def withdraw(self, value):
|
|
|
+ Customer.check_type(value)
|
|
|
+ if self.balance < value:
|
|
|
+ raise ValueError('Сумма списания превышает баланс')
|
|
|
+ else:
|
|
|
+ self.balance -= value
|
|
|
+
|
|
|
+ def deposit(self, value):
|
|
|
+ Customer.check_type(value)
|
|
|
+ self.balance += value
|
|
|
+
|
|
|
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
+
|
|
|
+def sum_numbers(numbers: list[int]):
|
|
|
+ if not isinstance(numbers, list):
|
|
|
+ raise TypeError("Аргумент numbers должен быть списком")
|
|
|
+ if not numbers:
|
|
|
+ raise ValueError("Пустой список")
|
|
|
+ for elem in numbers:
|
|
|
+ if not isinstance(elem, (int, float)):
|
|
|
+ raise TypeError('Неправильный тип элемента')
|
|
|
+ return sum(numbers)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+
|
|
|
+ for value in (True, (1, 2, 3), {1: 'hello'}, {1, 2, 3}):
|
|
|
+ try:
|
|
|
+ result = sum_numbers(value)
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ try:
|
|
|
+ result = sum_numbers([])
|
|
|
+ except ValueError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ try:
|
|
|
+ sum_numbers([1, 'hello', 2, 3])
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ try:
|
|
|
+ sum_numbers([1, 2, 3, 4, 5, [1, 2, 3]])
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ try:
|
|
|
+ sum_numbers([1, 2, 3, 4, 5, {1, 2, 3}])
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ try:
|
|
|
+ sum_numbers([1, 2, 3, 4, 5, (1, 2, 3)])
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+
|
|
|
+ assert sum_numbers([1, 2, 3, 4, 5]) == 15
|
|
|
+ assert sum_numbers([1, 2, 3, 4, 5.0]) == 15.0
|
|
|
+
|
|
|
+
|
|
|
+ # raise_1()
|
|
|
+ # raise_2()
|
|
|
+ # raise_3()
|
|
|
+ # function_2()
|
|
|
+
|
|
|
+ # cus = Customer('user, 110')
|
|
|
+ # cus.check_type()
|
|
|
+
|
|
|
+ # my_list = [1, 2, 'asfadsf']
|
|
|
+ # empty_list = []
|
|
|
+
|
|
|
+ # sum_numbers(my_list)
|
|
|
+ # sum_numbers(empty_list)
|
|
|
+
|
|
|
+ '''
|
|
|
+ assert Customer.check_type(2) is None, 'Метод check_type не должен ничего возращать'
|
|
|
+ assert Customer.check_type(2.5) is None, 'Метод check_type не должен ничего возращать'
|
|
|
+
|
|
|
+ for i in ['hello', [1, 2, 3], dict(), set()]:
|
|
|
+ try:
|
|
|
+ Customer.check_type(i)
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+ else:
|
|
|
+ raise TypeError(f'Метод check_type должен вызывать ошибку если передать {i}')
|
|
|
+
|
|
|
+ bob = Customer('Bob Odenkirk')
|
|
|
+ assert bob.balance == 0
|
|
|
+ assert bob.name == 'Bob Odenkirk'
|
|
|
+ try:
|
|
|
+ bob.deposit('hello')
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+ else:
|
|
|
+ raise ValueError("Нельзя вносить на счет баланса строку")
|
|
|
+
|
|
|
+ try:
|
|
|
+ bob.deposit([])
|
|
|
+ except TypeError as error:
|
|
|
+ print(error)
|
|
|
+ else:
|
|
|
+ raise ValueError("Нельзя вносить на счет баланса список")
|
|
|
+
|
|
|
+ bob.deposit(200)
|
|
|
+ assert bob.balance == 200
|
|
|
+
|
|
|
+ try:
|
|
|
+ bob.withdraw(300)
|
|
|
+ except ValueError as e:
|
|
|
+ print(e)
|
|
|
+ else:
|
|
|
+ raise ValueError("Проверьте списание при превышении лимита")
|
|
|
+
|
|
|
+ bob.withdraw(150)
|
|
|
+ assert bob.balance == 50
|
|
|
+
|
|
|
+ terk = Customer('Terk', 1000)
|
|
|
+ assert terk.name == 'Terk'
|
|
|
+ assert terk.balance == 1000
|
|
|
+ terk.withdraw(999)
|
|
|
+ assert terk.balance == 1, 'Не списались деньги, проверяйте списание'
|
|
|
+ terk.withdraw(1)
|
|
|
+ assert terk.balance == 0, 'Не списались деньги, проверяйте списание'
|
|
|
+
|
|
|
+ try:
|
|
|
+ terk.withdraw(1)
|
|
|
+ except ValueError as e:
|
|
|
+ print(e)
|
|
|
+ else:
|
|
|
+ raise ValueError("Проверьте списание при превышении лимита")
|
|
|
+ assert terk.balance == 0
|
|
|
+ '''
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|
|
|
+
|