Я делаю программу (которая должна регистрировать имена пользователей, passowords), но получает эту проблему: «неожиданный EOF при синтаксическом анализе (<unknown>, строка 0) - PullRequest
0 голосов
/ 07 мая 2019
import ast


def register():
    cred_dict = {input("Username: "): input("Password: ")}

Сбор известных учетных данных - ошибка возникает в "cred_data = ast.literal_eval (file.read ())" "неожиданном EOF при синтаксическом анализе (, строка 0)"

    with open("database.txt") as file:
        cred_data = ast.literal_eval(file.read())

Добавить новыйучетные данные

    cred_data.update(cred_dict)

Сохранить учетные данные

    with open("database.txt", "a") as file:
        file.write(cred_data)


def login():

Загрузить учетные данные

   print("--------LOGIN--------")
   with open("database.txt") as file:
        cred_pairs = ast.literal_eval(file.read())

Выполнить действительный вход в систему

   return check_login(cred_pairs)


def check_login(credential_pairs):

Собрать данные

    try:
        username = input("Username: ")
        password = input("Password: ")
    except KeyboardInterrupt:


User cancelled

        print("Cancelled login")
        return False  # tell the program we haven't logged in

Существует ли пользователь?

    if username in credential_pairs:

Если true

        try:

Соответствует ли их пароль?

            if credential_pairs[username] == password:

Если true

                print(f"Welcome, {username}.")
                return True  # tell the program we've logged in
            else:

Если false

                print("Your password is incorrect")
                return False  # tell the program we haven't logged in

        except KeyError:

Что-то пошло не так!

            print("Something went wrong. Is your RAM broken?")
            return  

Скажите программе, что что-то пошло не так

        except KeyboardInterrupt:

Пользователь отменен

            print("Cancelled login")
            return False  # tell the program we haven't logged in

    else:


        print("That user does not exist.")
        return False  # tell the program we haven't logged in

Если выполнение когда-либо достигнуто здесь, вы были взломаны

    return  # tell the program something went wrong


command = input("Would you like to [login] or [register]?\n>>> ")
if command == "register":
    register()

elif command == "login":
    login()

1 Ответ

0 голосов
/ 08 мая 2019

ast использует compile, чтобы попытаться скомпилировать строку.Это означает, что строку необходимо преобразовать в выражение, которое можно оценить.Похоже, вы звоните ast.literal_eval() в пустой файл.Убедитесь, что в файле есть строка, которая является допустимым выражением.Должно работать только наличие строки в кавычках в файле, например 'test'

См. документы , а также ответ на этот вопрос

...