【发布时间】:2021-06-08 22:52:02
【问题描述】:
我是个新手,所以尽量不要评判我。我正在尝试基于旧的 2d 马里奥创建一个小型 2d 游戏。我已经有主窗口、注册和登录窗口,并且我有一个 json 文件来保存用户名和密码。 现在,我正在尝试使用登录功能。 问题似乎是这一行:
if plpaword in players['password']
这应该可以帮助您了解变量代表什么
f = open('player.json')
players = json.load(f)
plpaword = E2.get()
当我运行我的代码时,在我尝试登录之前,其他一切似乎都可以正常工作。登录后,它应该会创建一个新窗口,但发生的情况是什么都没有发生,并且它给出了错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
return self.func(*args)
File "/Users/kevin/PycharmProjects/ANewFile/ANewFile.py", line 101, in LI
passwords = players['password']
KeyError: 'password'
我使用了这些模块:
from tkinter import *
import tkinter
import tkinter.messagebox
from tkinter import messagebox
from tkinter import Tk, Button, Frame, Entry, END
import random
import json
创建一个帐户并将其保存到我的 player.json 文件中:
def SU():
try:
plusname = E1.get()
plpaword = E2.get()
plpaword2 = E3.get()
plemail = E4.get()
if plpaword == plpaword2:
if plusname in players:
messagebox.showerror(random.choice(error), "An account with that username already exists. "
"Please choose another.")
else:
players[plusname] = {'password': plpaword, 'email': plemail}
with open('player.json', 'w') as f:
json.dump(players, f)
signup.destroy()
messagebox.showinfo("Account Created!", "Please log in to your new account through log in.")
else:
messagebox.showerror(random.choice(error), "Passwords did not match. Please try again")
except:
messagebox.showerror(random.choice(error), random.choice(errormsg))
【问题讨论】:
-
请提供
player.json文件的例子。 -
没有看到
player.json里面有什么,我怀疑我们能提供帮助。 -
请提供预期的minimal, reproducible example (MRE)。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。
-
该特定错误似乎是因为
players字典中不存在密钥password,而您正尝试在if plpaword in players['password']行中访问它。处理此问题的经典方法是将尝试包装在try/except中,但 Dictionary 对象也有一个get方法,可以更简洁地处理它并允许您设置可迭代的默认值。免责声明:过去几年我没有在 Python 中工作过,所以可能有更好的方法 -
在进行检查之前,您应该首先检查
players是什么。这可能不是你想象的那样。