我正在编写简单的应用程序,它有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))
所有工作都很顺利。我的错误在哪里?
P.S。我正在使用Python 3.4
P.S.S修复我的错误信息。
答案 0 :(得分:0)
回答您对异常的担忧:
正如@Dunes所说,如果你不想提出异常,你就不能让for循环完成,所以在你的情况下你可以返回:
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
return
raise Exception("User '{}' not found.".format(login))
在更一般的情况下,不仅仅是在函数内部,您可以使用for ... else
:
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
break
else: # will execute only if `for` loops through all values without break
raise Exception("User '{}' not found.".format(login))
但也存在不同的问题:
您正在更新一个局部变量user
,它在set_last_result
函数的外部范围内无效,最明显的是它不会更新加载的json文件。