Python在读取JSON文件时处理异常

时间:2019-04-09 18:44:04

标签: python json

在加载JSON文件时,我包含try... except...。我的代码是:

with open(file,'r',encoding='utf-8') as r:
   try:
     j = json.load(r)
   except:
     j = json.loads('['+r.read().replace('}{','},{')+']')[0]

   print(j)

但是,j侧的except永远不会通读。如果我分别运行except代码,则可以毫无问题地打印j。

更新

对于JSON无法运行json.load(r),它将给出错误消息Extra data: line 1 column 106362 (char 106361)。在这种情况下,我必须通过将JSON传递到except部分来稍微“修改”文件。但是,print(j)返回一个空列表[]而不是真实的JSON。

我是Python的新手,只是想知道是否有人对我应该怎么做才能使try...except...正常工作有任何想法?

非常感谢!

1 个答案:

答案 0 :(得分:1)

try语句j = json.load(r)隐式读取文件,将文件的光标移到末尾。这意味着再次读取文件会输出一个空字符串,因为光标已经在文件末尾。

因此,解决方法是使用seek(0)重设光标:

with open(file,'r',encoding='utf-8') as r:
    try:
        j = json.load(r)
    except:
        r.seek(0)
        j = json.loads('['+r.read().replace('}{','},{')+']')[0]

print(j)

这也花费了我一些调试工作,但是在任何IDE中使用适当的调试工具,当您输入except语句时,您都可以看到文件r为空。

相关问题