123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 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()
|