【问题标题】:Python, json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1). How to troubleshoot?Python,json.decoder.JSONDecodeError:预期值:第 2 行第 1 列(字符 1)。如何排除故障?
【发布时间】:2021-08-10 09:32:47
【问题描述】:

这里是 python 和一般编程的新手,请放轻松,哈哈。

我有一个脚本,它每 60 秒轮询一次区块链 API,以从 JSON API 获取更新的数据。它会轮询最新的活动,然后打印出带有更新的热点编号的新活动。

在过去的 3-4 周里,它一直在完美运行。直到最近 3-4 天左右,我才开始在下面收到此错误。

Traceback (most recent call last):
  File "c:\Users\hello\Desktop\Dev\scripts\script-polling1.py", line 77, in <module>
    data2 = res1.json()['data']
  File "C:\Users\hello\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\requests\models.py", line 900, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 346, in loads        
    return _default_decoder.decode(s)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 337, in decode        
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 355, in raw_decode    
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)

每当它出错时,我只需重新启动它,它会再工作 1-4 小时,然后再次崩溃。

上面的错误显示它在第 77 行停止,这是我对 API 的 json() 调用,但它并不总是一致的,因为我多次调用不同的 json() api URL。它在 json() 出错时会有所不同。

但为了排除故障,这是上面第 77 行的 json()。

for hotspotaddress in data:
    foundaddress = hotspotaddress['address']
    foundname = hotspotaddress['name']
    res1 = requests.get('https://api.url/' + foundaddress + '/activity/count?min_time=-1%20day&bucket=day')
    data2 = res1.json()['data']   ##THIS IS LINE 77 where the script crashes##
    previous_witness = str(data2['poc_receipts_v1'])
    previous_rewards = str(data2['rewards_v2'])
    previous_info.append([foundaddress,foundname,previous_witness,previous_rewards])

这是它从中提取的 json 的一个小样本

{
  "data": {
    "vars_v1": 0,
    "validator_heartbeat_v1": 0,
    "unstake_validator_v1": 0,
    "transfer_validator_stake_v1": 0,
    "transfer_hotspot_v1": 0,
a lot more inbetween.
    "assert_location_v2": 1,
    "assert_location_v1": 0,
    "add_gateway_v1": 1
  }
}

现在我猜测它一定是 API 数据中的某些东西,因为脚本“确实”工作,并且一旦它有无法识别的数据或其他东西,它就必须崩溃。

我想我的问题是我该如何解决这个问题,因为区块链 API 数据每秒钟/每分钟都在不断变化。阅读数十篇具有相同主题的其他 stackoverflow 文章,但无法确定其中任何一篇文章是否适用于我的问题。我是不是用错了 json()?

非常感谢这个新手的任何帮助!

【问题讨论】:

  • 您可以将 json 代码调用包装在 try except 块中。捕获 json 解析错误并打印/记录您尝试解析的数据,以便您可以检查它以查看问题所在。我还建议您检查 request.get 调用是否成功,也许您收到 5xx 或 4xx 错误
  • 感谢您的建议。我将研究捕获错误并在发生错误时打印日志。我将不得不弄清楚如何解析 json 错误大声笑。奇怪的是,我让脚本从命令提示符运行,另一个从我的 Visual Studio 代码运行,并且当时只有命令提示符失败,而两者都失败了。有时情况正好相反。
  • 我怀疑在它失败的情况下你会得到一些不是 2xx 响应的 http 错误,所以你最终没有真正的 json 数据,所以解析器失败
  • 嗨,克里斯。这就说得通了。上面的部分错误是“JSONDecodeError("Expecting value", s, err.value) from None”,我猜当没有返回值时它会出错,但如果有返回值则正常运行。我想我可能需要查看代码以获得 if/else 以防有任何项目返回为空

标签: python json api blockchain


【解决方案1】:

因此,虽然这可能不是一个完整的答案,因为我无法告诉您为什么您可能会遇到错误,但我建议您将以下内容添加到您的代码中以帮助调试问题

for hotspotaddress in data:
    foundaddress = hotspotaddress['address']
    foundname = hotspotaddress['name']
    res1 = requests.get('https://api.url/' + foundaddress + '/activity/count?min_time=-1%20day&bucket=day')
    try
        data2 = res1.json()['data']  ##THIS IS LINE 77 where the script crashes##
        previous_witness = str(data2['poc_receipts_v1'])
        previous_rewards = str(data2['rewards_v2'])
        previous_info.append([foundaddress, foundname, previous_witness, previous_rewards])
    except json.decoder.JSONDecodeError as jd:
        print("http response code: ", res1.status_code)
        print("http response data: ", res1.content)
        raise  jd

【讨论】:

  • 谢谢克里斯。我会将这些行添加到我的代码中,它们在 json() 处失败并查看是否出现任何问题。
  • 让我们保持最新状态。就像我说的不是完整的答案,但也不完全是评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多