123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- class MyException(Exception):
- """this is my excpetion"""
-
- def __init__(self, *args):
- if args:
- self.massage = args[0]
- else:
- self.message = None
- def __str__(self):
- print('str called')
- if self.message:
- return f"MyException {self.message}"
- else:
- return "MyException is empty"
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class SnakeExceptionBase(Exception):
- """Основной класс ошибок змейки"""
- pass
- class SnakeBorderException(SnakeExceptionBase):
- """Ошибка соприкосновения змеи со стенкой"""
- pass
- class SnakeTailException(SnakeBorderException):
- """Соприкосновение змеи и тела"""
- pass
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class UserNotFoundError(Exception):
- pass
- users = {
- "alice": {"name": "Alice Smith", "email": "alice@example.com"},
- "bob": {"name": "Bob Johnson", "email": "bob@example.com"},
- "jack": {"name": "Jack Wild", "email": "jack_wild@example.com"}
- }
- def get_user(username):
- if username not in users.keys():
- raise UserNotFoundError("User not found")
- return users[username]['name']
- def get_user_test():
- try:
- username = get_user('bob')
- except UserNotFoundError as e:
- print(e)
- else:
- print(username)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class NegativeDepositError(Exception):
- pass
- class InsufficientFundsError(Exception):
- pass
- class BankAccount:
- def __init__(self, balance):
- self.balance = balance
- def deposit(self, value):
- if value < 0:
- raise NegativeDepositError("Нельзя пополнить счет отрицательным значением")
- self.balance += value
-
- def withdraw(self, value):
- if value > self.balance:
- raise InsufficientFundsError("Недостаточно средств для снятия")
- self.balance -= value
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class PasswordInvalidError(Exception):
- pass
- class PasswordLengthError(PasswordInvalidError):
- pass
- class PasswordContainUpperError(PasswordInvalidError):
- pass
- class PasswordContainDigitError(PasswordInvalidError):
- pass
- class User:
- def __init__(self, username, password=None):
- self.username = username
- self.password = password
- def set_password(self, value):
- up_str = ''
- digit_str = ''
- if len(value) < 8:
- raise PasswordLengthError("Пароль должен быть не менее 8 символов")
-
- for sim in value:
- if sim.isupper():
- up_str += sim
- if sim.isdigit():
- digit_str += sim
- if not up_str:
- raise PasswordContainUpperError('Пароль должен содержать хотя бы одну заглавную букву')
- if not digit_str:
- raise PasswordContainDigitError('Пароль должен содержать хотя бы одну цифру')
- self.password = value
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def func_1():
- # raise MyException('asdf', 1, 2, 3)
- raise MyException()
- # try:
- # raise MyException('asdf', 1, 2, 3)
- # except MyException:
- # print('done')
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def main():
- # get_user_test()
- # func_1()
- assert issubclass(PasswordInvalidError, Exception)
- assert issubclass(PasswordLengthError, PasswordInvalidError)
- assert issubclass(PasswordContainUpperError, PasswordInvalidError)
- assert issubclass(PasswordContainDigitError, PasswordInvalidError)
- user = User("johndoe")
- try:
- user.set_password("weakpwd")
- except PasswordLengthError as e:
- print(e)
- try:
- user.set_password("strongpassword8")
- except PasswordContainUpperError as e:
- print(e)
- try:
- user.set_password("Safepassword")
- except PasswordContainDigitError as e:
- print(e)
- user.set_password("SecurePass123")
- assert user.password == 'SecurePass123'
- if __name__ == "__main__":
- main()
|