python load()遇到json文件空,报错

记录一下,找久没摸代码然后就好久才解决…
重要的就是看报错,然后有什么异常,加到except里就行

    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以看到异常是,json.decoder.JSONDecodeError

所以直接加上就好了

    try:
        with open(file_name) as f:
            user = json.load(f)
            injuge = input(f"are you {user} ? yes or no\n")
            if injuge == 'yes':
                print(f"hello {user}")
            else:
                get_new_username()
    except json.decoder.JSONDecodeError:
        get_new_username()

横线下面是从别人那学习的,如果您能看的到原网页的话,非常建议去看一下原作者的blog(当作扩展了

链接:https://bobbyhadz.com/blog/python-json-decoder-jsondecodeerror-expecting-value-line-1-column-1-char-0

json.load方法用于将文件反序列化为 Python 对象,而 json.loads方法用于将 JSON 字符串反序列化为 Python 对象。

原因一当尝试错误地读取 JSON 文件或尝试读取空的 JSON 文件或包含无效 JSON 时,通常会导致该错误。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_data = json.load(f)

    print(my_data)  # 👉️ {'name': 'Alice', 'age': 30}
"""example.json该示例假定在同一目录中有一个名为的文件。
确保您正在读取的文件不是空的,因为这通常会导致错误。
"""

错误的另一个常见原因是在尝试从 JSON 文件读取时将文件名传递给方法。 json.loads()

json.load()方法需要一个文本文件或包含实现.read()方法的 JSON 文档的二进制文件。

或者,您手动调用read()文件对象上的方法并使用该json.loads()方法

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    # 👇️ make sure to call read()
    my_data = json.loads(f.read())

    print(my_data)  # 👉️ {'name': 'Alice', 'age': 30}

    print(type(my_data))  # 👉️ <class 'dict'>


链接:https://bobbyhadz.com/blog/python-attributeerror-str-object-has-no-attribute-read

AttributeError: ‘str’ 对象没有属性 ‘read’

当我们read()在字符串(例如文件名)而不是文件对象上调用方法或json.load()错误地使用该方法时,会出现 Python “AttributeError: ‘str’ object has no attribute ‘read’”。要解决此错误,请 read()在打开文件后调用文件对象上的方法。

file_name = 'example.txt'

with open(file_name, encoding='utf-8') as f:
    # ⛔️ AttributeError: 'str' object has no attribute 'read'
    read_data = file_name.read()
    print(read_data)

我们尝试read()在文件名字符串而不是导致错误的文件对象上调用该方法。

如果您正在从文件中读取,请确保改为read()在文件对象上调用该方法。

file_name = 'example.txt'

with open(file_name, encoding='utf-8') as f:
    # ✅ calling read() on file object
    read_data = f.read()
    print(read_data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值