FileNotFoundError: [Errno 2] No such file or directory

Bismar

Новичок
Пользователь
Окт 8, 2023
11
1
3
Здравствуйте!
Задача:
Создаём класс User, где хранится логин и пароль пользователя.
В классе есть две функции сетер и гетер (password).
Одна устанавливает значение пароля другая смотрит.
Прежде чем установить значение пароля функция password-сетер
проверяет чтоб пароль был строкой, определённой длины, чтоб пароль имел хотя бы одну
цифру(в этом ей помогает функция is_include_number). Функция password_dictionary открывает текстовый файл
в котором записаны легкие пороли(qwerty, 12345678, abcde) и в функции password-сетер проверяется если пароль легкий то вывести ошибку.
Но когда я в консоли ввожу:
g = User('aaa', 'asddf3')
где код должен вывести правильно, то мне выводит:

Traceback (most recent call last):
File "C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<input>", line 5, in __init__
File "<input>", line 38, in password
File "<input>", line 21, in password_dictionary
FileNotFoundError: [Errno 2] No such file or directory: 'input(OO�).txt'

Почему так?

Код:
from string import digits

class User:

    def __init__(self, login, password):
        self.login = login
        self.password = password

    @property
    def password(self):
        print('getter called')
        return self.__password

    @staticmethod
    def is_include_number(password):
        for digit in digits:
            if digit in password:
                return True
        return False

    @staticmethod
    def password_dictionary(password):
        a = open('input(OOП).txt')
        for i in a:
            if password == i:
                return False
        return True

    @password.setter
    def password(self, value):
        print('setter called')
        if not isinstance(value, str):
            raise TypeError("Пароль должен быть строкой")
        if len(value) < 4:
            raise TypeError("Длина пароля слишком мала, минимум должно быть 4 символа")
        if len(value) > 12:
            raise TypeError("Длина пароля слишком велика, максимум должно быть 12 символа")
        if not User.is_include_number(value):
            raise TypeError("Пароль должен содержать хотя бы одну цифру")
        if User.password_dictionary(value):
            raise TypeError("Пароль слишком легкий")
        self.__password = value


Операционная система - Windows
Версия Питон - 3.10
 
Последнее редактирование модератором:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
у вас проблема с кодировками, попробуйте убрать из имени файла русские буквы
и у вас файл не закрывается по моему
 
  • Мне нравится
Реакции: Dr. Mundo

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
Не самое лучшее решение задачи. Я бы сделал так

Python:
class User:
    def __init__(self, login, password):
        self.login = login
        self.password = password

    @property
    def password(self):
        print('getter called')
        return self.__password

    @password.setter
    def password(self, value):
        print('setter called')
        self.check_password(value)
        self.__password = value

    @staticmethod
    def check_password(psw):
        if not isinstance(psw, str):
            raise TypeError("Пароль должен быть строкой")

        if len(psw) < 4:
            raise TypeError("Длина пароля слишком мала, минимум должно быть 4 символа")

        if len(psw) > 12:
            raise TypeError("Длина пароля слишком велика, максимум должно быть 12 символа")

        if not any(char.isdigit() for char in psw):
            raise TypeError("Пароль должен содержать хотя бы одну цифру")

        with open('file.txt') as f:
            if any(psw == i.strip() for i in f):
                raise TypeError("Пароль слишком легкий")
 
Последнее редактирование:
  • Мне нравится
Реакции: Dr. Mundo

Форум IT Специалистов