Python 3 Urlopen问题

时间:2017-10-12 16:49:44

标签: python json

我知道它已被大量记录,我试图将.read().decode('utf-8')放在我认为应该去的地方,但我仍然遗漏了一些东西,我不知道还有什么地方可以转。我有一个在Python 2.7中运行良好的脚本,通过获取对象ID来为数据刮取ESRI REST URL。但是,它似乎没有在Python 3中合作。它在第29行连续失败(见下文)。任何帮助将不胜感激。

        version = json.loads(webresp.decode('utf-8'))['currentVersion']

我总是一直得到这个错误:

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    main(url, jsonfilelocation, jsonfilename)
  File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 73, in main
    oids = ESRIJSON().getobjrange(webconn, path)
  File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 29, in getobjrange
    version = json.loads(webresp.decode('utf-8'))['currentVersion']
  File "C:\ArcGISPro\bin\Python\envs\arcgispro-py3\lib\json\__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

1 个答案:

答案 0 :(得分:1)

我通过将json.loads()更改为json.load并删除了所有decode('utf-8')来解决了您的错误。现在我遇到了另一个错误,因为你没有在Python 3中正确处理字符串格式。qs变量需要采用格式"?where=&outFields=*&returnGeometry={}。格式(变量添加到字符串),这可以节省大量的担忧编码问题。我仍然会在ascii字符串中出现qs错误,但希望这会指向正确的方向。 Python 3比2.7好10倍,值得付出努力。