随机json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)

时间:2016-12-30 22:59:50

标签: python json

我是Python编码的新手,最近我学习了API和JSON。我写了一小段测试代码与随机数生成器(https://www.random.org/)进行交互。它一直很好用,但最近我遇到了JSONDecodeError而不是随机而且不稳定。它有时会发生,但不是所有时间都发生。我可以运行代码,获取错误,不做任何更改,然后在10分钟后运行代码,不会出错。我做了仔细检查,以确保API通过浏览器运行。以下是基础知识:

书面通过:
PyCharm社区版2016.3.1
Build#PC-163.9735.8,建于2016年12月14日
JRE:1.8.0_112-release-408-b6 x86
JVM:JetBrains s.r.o的OpenJDK服务器VM

import requests
import json

print("Random Number Generator:")
print("========================")

# RANDOM NUMBER GEN
response01 = requests.get(
"https://www.random.org/integers/?num=1&min=1&max=999999999&col=1&base=10&format=plain&rnd=new")
data1 = response01.json()

print(type(data1))
print(data1)

此代码只是从API打印一个随机数。这是我得到的随机错误:

Random Number Generator:
========================
Traceback (most recent call last):
  File "C:/REDACTED/REDACTED/REDACTED/REDACTED/API Practice 2.py", line 10, in <module>
    data1 = response01.json()
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\requests\models.py", line 850, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Process finished with exit code 1

所以我的问题有两个部分 A)导致此错误的原因是什么?
B)为什么它(似乎)随机出现?

感谢任何人都可以提供的任何信息。再一次,我是Python的NOOB,所以请不要因为我的无知或缺乏或接受教育。

注意:REDACTED只是一个占位符。

1 个答案:

答案 0 :(得分:1)

有时您会收到HTTP错误,然后响应对象没有内容,因此您无法解析它。

import requests
import json

print("Random Number Generator:")
print("========================")

# RANDOM NUMBER GEN
response01 = requests.get("https://www.random.org/integers/?num=1&min=1&max=999999999&col=1&base=10&format=plain&rnd=new")
try :
    data1 = json.loads(response01)
    print('[i] Response : %s' % data1)
except JSONDecodeError as e :
    print('[!] Error while decoding response contents')
    print('[!] %s - %s' % (response01.status_code, response01.text))
    # here you could replay the request