#python #python-3.x
#python #python-3.x
Вопрос:
Я создаю игру, которая начинается с функции входа в систему
Пользователь может «войти в систему (A) или создать учетную запись (B)»
Моя проблема в том, что если пользователь входит в систему с именем пользователя, которого не существует, я получаю ошибку ключа: «(независимо от имени пользователя, которое они ввели)»
Ожидаемый результат: я бы хотел, чтобы код выводил «Пользователь не существует», если это произойдет.
Проблема может быть воспроизведена с помощью этого кода и ввода «A» для входа в систему и ввода случайного имени пользователя, которого не существует.
users = {} # Currently empty list called Users. Stores all log ins
global status
status = ""
def LogIn():#Function is called Log In. Can be called at any time.
status = input("Log in (A) or Create an account(B) - Enter 'A' or 'B' ") # asks for log in information
status = status.upper()
if status == "A":
oldUser() #Already has an account
elif status == "B":
newUser() #Would like to make a new account
return status #Moves on to the function named status
def newUser(): # Creating an account.
CreateUsername = input("Create username: ") #Enter a what your username is
if CreateUsername in users: # check if login name exists in the list
print ("n Username already exists!n")
else:
createPassw = input("Create password: ")
users[CreateUsername] = createPassw # add login and password
print("nUser created!n")
def oldUser():
username = input("Enter username: ")
passw = input("Enter password: ")
# check if user exists and login matches password
if passw == users[username]:
print ("Login successful!n")
print('Game begins')
else:
print ("nUser doesn't exist or wrong password!n")
while status != "q":
status = LogIn()
Дополнительная информация: больше контекста того, как работает функция входа в систему.
Комментарии:
1. Во-первых, вы должны включить сообщение об ошибке в вопрос, а не в изображение. (обычно это включается в блок кода)
2. Что касается вопроса — похоже, вы знаете, как проверить, находится ли ключ в dict. Так что просто сделайте это перед доступом к ключу.
3. Это логическая ошибка. Я думаю, это происходит, когда пользователь решает войти в систему для пользователя, который еще не существует.
4. @ScottBoston Спасибо, теперь это работает
Ответ №1:
Вы получаете сообщение об ошибке, потому что пытаетесь получить доступ к users
словарю с помощью ключа, которого нет в словаре. Используемый вами ключ — это имя пользователя пользователя. Поэтому, когда в словаре нет пользователя с этим именем пользователя, вы получаете KeyError
Альтернативой использованию try
и except
было бы реструктурировать ваш словарь в массив пользовательских словарей, при этом каждый пользовательский словарь содержит ключи username
и password
Ответ №2:
Посмотрите на использование python try
и except
. Они существуют, чтобы помочь нам обрабатывать ошибки, когда они возникают, при настройке способа обработки этих ошибок. Итак, для вашего конкретного вопроса попробуйте:
def oldUser():
username = input("Enter username: ")
passw = input("Enter password: ")
# check if user exists and login matches password
try:
if passw == users[username]:
print ("Login successful!n")
print('Game begins')
except:
print ("nUser doesn't exist or wrong password!n")
Ответ №3:
Исправлено путем изменения
def oldUser():
username = input("Enter username: ")
passw = input("Enter password: ")
# check if user exists and login matches password
if username not in users:
print ("Username doesn't exist")
print('Game begins')
elif passw == users[username]:
print('Log In successful')
else:
print ("nUser doesn't exist or wrong password!n")
while status != "q":
status = LogIn()