【发布时间】:2014-08-08 21:54:46
【问题描述】:
我正在编写一个简单的应用程序,其中包含用于存储一些用户信息的 json 文件。
{
"users": [
{
"last result": 15,
"login": "admin",
"id": 1,
"password": "1"
},
{
"last result": 2,
"login": "user",
"id": 2,
"password": "1"
}
]
}
例如,我需要从“user”=admin 更改值“last result” 我有从 json 获取数据的方法:
def load_data_from_json(test_file_name):
with open(test_file_name, encoding="utf-8") as data_file:
return json.load(data_file)
test_file_name - json 的名称(在我的代码中是 - “auth.json”)
然后我尝试设置新值:
def set_last_result(login, new_result):
for user in load_data_from_json("auth.json")["users"]:
if user["login"] == login:
user["last result"] = new_result
raise Exception("User '{}' not found.".format(login))
但我有一个错误:
File "/Users/future/PycharmProjects/module_for_test/user.py", line 53, in set_last_result
raise Exception("User '{}' not found.".format(login))
Exception: User 'admin' not found.
如果我只取“最后一个结果”的值
def get_last_result(login):
for user in load_data_from_json("auth.json")["users"]:
if user["login"] == login:
return user["last result"]
raise Exception("User '{}' not found.".format(login))
一切正常。我的错在哪里?
附:我正在使用 Python 3.4
P.S.S 修复我的错误信息。
【问题讨论】:
-
我在您的代码中看不到任何
print(user["admin"]),更重要的是我在您的用户字典中看不到任何"admin"键,这可能是KeyError的来源。 -
用户没有'admin'键,他们有'login'键。当您打印
user['admin']时,您会生成一个密钥错误。 -
对不起,我发布了不正确的错误信息,现在我已经修复了。
-
您的 get 方法在找到用户时返回。 set 方法不会,因此它总是会完成 for 循环然后引发异常。
标签: python json python-3.x