【发布时间】:2013-01-31 17:04:48
【问题描述】:
从一些长而复杂的 JSON 文件中加载数据的 Python 代码:
with open(filename, "r") as f:
data = json.loads(f.read())
(注意:最好的代码版本应该是:
with open(filename, "r") as f:
data = json.load(f)
但两者都表现出相似的行为)
对于许多类型的 JSON 错误(缺少分隔符、字符串中不正确的反斜杠等),这会打印一条非常有用的消息,其中包含发现 JSON 错误的行号和列号。
但是,对于其他类型的 JSON 错误(包括经典的“在列表中的最后一项上使用逗号”,以及其他诸如大写 true/false 之类的事情),Python 的输出只是:
Traceback (most recent call last):
File "myfile.py", line 8, in myfunction
config = json.loads(f.read())
File "c:\python27\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "c:\python27\lib\json\decoder.py", line 360, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\python27\lib\json\decoder.py", line 378, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
对于那种类型的 ValueError,如何让 Python 告诉你 JSON 文件中的错误在哪里?
【问题讨论】:
-
您可以转储您的文件的摘录吗?
-
我现在不想在特定文件中查找错误;我正在尝试修改我的程序,以便它在以后读取的任何文件中突出显示错误。
-
没有直接关系,但您可以使用
json.load(f)而不是json.loads(f.read()) -
@OJW 这个行为是在哪个版本的 python 上发生的?
-
Python 3.8.1 现在给出错误位置“期望值:第 1 行第 21 列(字符 20)”