【发布时间】:2022-01-14 18:50:02
【问题描述】:
我正在遍历用于构造带有 JSON 值的 url 的名称列表。我在 Python 3.x 中使用 json 和 urllib 来提取 JSON 值以用作脚本中进程的参数。第一次迭代一切正常,但之后我得到一个 TYPE 错误。
import os, sys, json, urllib.request
info1 = r"https://myurl.services"
info2 = r"/FeatureServer/info/itemInfo?f=pjson"
sList = ['servic_a', 'service_b', 'service_c']
for i in sList:
url = '{}{}{}'.format(info1, i, info2)
with urllib.request.urlopen(url) as url:
data = json.loads(url.read().decode())
这第一次有效,但第二次迭代给了我这个:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Program Files\Python\envs\py3\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\Program Files\Python\envs\py3\lib\urllib\request.py", line 517, in open
protocol = req.type
AttributeError: 'HTTPResponse' object has no attribute 'type'
我尝试过data.clear() 和url.close(),但都不起作用。
【问题讨论】:
-
with urllib.request.urlopen(url) as url:首先工作,因为您的网址是正确的,然后它被urllib.request.urlopen(url)的响应覆盖,所以在下一次迭代中,它尝试执行urllib.request.urlopen(url),因此最终执行with urllib.request.urlopen(<your http response of previous value>) as url.要解决此问题,请使用with urllib.request.urlopen(url) as http_response:之类的内容,然后使用data = json.loads(http_response.read().decode()) -
谢谢。我想这是一个愚蠢的过度网站,但如果你想发布它,我会检查答案。
标签: json python-3.x urllib