user_exception.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. class MyException(Exception):
  2. """this is my excpetion"""
  3. def __init__(self, *args):
  4. if args:
  5. self.massage = args[0]
  6. else:
  7. self.message = None
  8. def __str__(self):
  9. print('str called')
  10. if self.message:
  11. return f"MyException {self.message}"
  12. else:
  13. return "MyException is empty"
  14. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. class SnakeExceptionBase(Exception):
  16. """Основной класс ошибок змейки"""
  17. pass
  18. class SnakeBorderException(SnakeExceptionBase):
  19. """Ошибка соприкосновения змеи со стенкой"""
  20. pass
  21. class SnakeTailException(SnakeBorderException):
  22. """Соприкосновение змеи и тела"""
  23. pass
  24. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  25. class UserNotFoundError(Exception):
  26. pass
  27. users = {
  28. "alice": {"name": "Alice Smith", "email": "alice@example.com"},
  29. "bob": {"name": "Bob Johnson", "email": "bob@example.com"},
  30. "jack": {"name": "Jack Wild", "email": "jack_wild@example.com"}
  31. }
  32. def get_user(username):
  33. if username not in users.keys():
  34. raise UserNotFoundError("User not found")
  35. return users[username]['name']
  36. def get_user_test():
  37. try:
  38. username = get_user('bob')
  39. except UserNotFoundError as e:
  40. print(e)
  41. else:
  42. print(username)
  43. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  44. class NegativeDepositError(Exception):
  45. pass
  46. class InsufficientFundsError(Exception):
  47. pass
  48. class BankAccount:
  49. def __init__(self, balance):
  50. self.balance = balance
  51. def deposit(self, value):
  52. if value < 0:
  53. raise NegativeDepositError("Нельзя пополнить счет отрицательным значением")
  54. self.balance += value
  55. def withdraw(self, value):
  56. if value > self.balance:
  57. raise InsufficientFundsError("Недостаточно средств для снятия")
  58. self.balance -= value
  59. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  60. class PasswordInvalidError(Exception):
  61. pass
  62. class PasswordLengthError(PasswordInvalidError):
  63. pass
  64. class PasswordContainUpperError(PasswordInvalidError):
  65. pass
  66. class PasswordContainDigitError(PasswordInvalidError):
  67. pass
  68. class User:
  69. def __init__(self, username, password=None):
  70. self.username = username
  71. self.password = password
  72. def set_password(self, value):
  73. up_str = ''
  74. digit_str = ''
  75. if len(value) < 8:
  76. raise PasswordLengthError("Пароль должен быть не менее 8 символов")
  77. for sim in value:
  78. if sim.isupper():
  79. up_str += sim
  80. if sim.isdigit():
  81. digit_str += sim
  82. if not up_str:
  83. raise PasswordContainUpperError('Пароль должен содержать хотя бы одну заглавную букву')
  84. if not digit_str:
  85. raise PasswordContainDigitError('Пароль должен содержать хотя бы одну цифру')
  86. self.password = value
  87. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  88. def func_1():
  89. # raise MyException('asdf', 1, 2, 3)
  90. raise MyException()
  91. # try:
  92. # raise MyException('asdf', 1, 2, 3)
  93. # except MyException:
  94. # print('done')
  95. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  96. def main():
  97. # get_user_test()
  98. # func_1()
  99. assert issubclass(PasswordInvalidError, Exception)
  100. assert issubclass(PasswordLengthError, PasswordInvalidError)
  101. assert issubclass(PasswordContainUpperError, PasswordInvalidError)
  102. assert issubclass(PasswordContainDigitError, PasswordInvalidError)
  103. user = User("johndoe")
  104. try:
  105. user.set_password("weakpwd")
  106. except PasswordLengthError as e:
  107. print(e)
  108. try:
  109. user.set_password("strongpassword8")
  110. except PasswordContainUpperError as e:
  111. print(e)
  112. try:
  113. user.set_password("Safepassword")
  114. except PasswordContainDigitError as e:
  115. print(e)
  116. user.set_password("SecurePass123")
  117. assert user.password == 'SecurePass123'
  118. if __name__ == "__main__":
  119. main()