Py学习  »  Python

attributeError:“tuple”对象在python3中没有属性“timeout”-urllib请求

gwydion93 • 4 年前 • 1239 次点击  

我正在使用urllib发出请求并返回一些数据:

queryURL = "https://hazards.fema.gov/gis/nfhl/rest/services/CSLF/Prelim_CSLF/MapServer/3/query"
params = urllib.parse.urlencode({'f': 'json', 'geometryType': 'esriGeometryPolygon', 'outFields': 'OBJECTID, SHAPE, CSLF_ID, Area_SF', 'returnGeometry': 'false'})

在这里之前我不会遇到任何问题:

req = urllib.request.urlretrieve(queryURL, params)

然后:

urllib.request.urlopen(req)

此时我得到一个错误抛出- AttributeError: 'tuple' object has no attribute 'timeout'. 我知道它返回了一个不变的元组,因为我格式化了 params 变量。我的问题是,我如何绕过它,以便我可以开始查看我的结果?

jsonResult = json.load(response)

根据要求,这里是回溯:

AttributeError                            Traceback (most recent call last) <ipython-input-68-cb3f46b2da76> in <module>()
----> 1 urllib.request.urlopen(req)

C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    221     else:
    222         opener = _opener
--> 223     return opener.open(url, data, timeout)
    224 
    225 def install_opener(opener):

C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py in open(self, fullurl, data, timeout)
    515                 req.data = data
    516 
--> 517         req.timeout = timeout
    518         protocol = req.type
    519 

AttributeError: 'tuple' object has no attribute 'timeout'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37924
 
1239 次点击  
文章 [ 1 ]  |  最新文章 4 年前
abarnert
Reply   •   1 楼
abarnert    5 年前

req = urllib.request.urlretrieve(queryURL, params)
urllib.request.urlopen(req)

urlretrieve (filename, headers)

urlopen Request

response = urllib.request.urlopen(queryURL, params)

jsonResult = json.load(response) NameError response


urlencode

TypeError

Content-Type


urllib.request

Requests package

queryURL = "https://hazards.fema.gov/gis/nfhl/rest/services/CSLF/Prelim_CSLF/MapServer/3/query"
params = {'f': 'json', 'geometryType': 'esriGeometryPolygon', 'outFields': 'OBJECTID, SHAPE, CSLF_ID, Area_SF', 'returnGeometry': 'false'}
jsonResult = requests.post(queryURL, data=params).json()