无法将值更改为json

2024-04-20 03:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个简单的应用程序,它有json文件来存储一些用户的信息。你知道吗

{
    "users": [
        {
            "last result": 15,
            "login": "admin",
            "id": 1,
            "password": "1"
        },
        {
            "last result": 2,
            "login": "user",
            "id": 2,
            "password": "1"
        }
    ]
}

例如,我需要将值“last result”从“user”=admin更改为 我有从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\u file\u name-json的名称(在我的代码中是-身份验证.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))

一切顺利。我的错在哪里?你知道吗

另外,我正在使用python3.4

请修复我的错误消息。你知道吗


Tags: testjsondataadminexceptionnotloginload
1条回答
网友
1楼 · 发布于 2024-04-20 03:26:48

回答您对异常的担忧:

正如@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文件。你知道吗

要做到这一点,你需要Write JSON data to file in python。你知道吗

相关问题 更多 >