Python3开放问题
我知道它有大量的文档记录,我试着把Python3开放问题,python,json,Python,Json,我知道它有大量的文档记录,我试着把.read().decode('utf-8')放在我认为它应该去的任何地方,但我仍然遗漏了一些东西,我不确定还能去哪里。我有一个在Python2.7中运行良好的脚本,通过获取对象ID来获取ESRI REST URL中的数据。然而,它在Python3中似乎并不配合。它在第29行连续出现故障(见下文)。任何帮助都将不胜感激 version = json.loads(webresp.decode('utf-8'))['currentVersion']
.read().decode('utf-8')
放在我认为它应该去的任何地方,但我仍然遗漏了一些东西,我不确定还能去哪里。我有一个在Python2.7中运行良好的脚本,通过获取对象ID来获取ESRI REST URL中的数据。然而,它在Python3中似乎并不配合。它在第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行,在
main(url、jsonfilelocation、jsonfilename)
文件“\\SERVER\Projects\Python\TOUCH\esrrestjson.py”,第73行,主目录
oids=ESRIJSON().getobjrange(webconn,路径)
文件“\\SERVER\Projects\Python\TOUCH\esrrestjson.py”,第29行,在getobjrange中
version=json.load(webresp.decode('utf-8'))['currentVersion']
文件“C:\ArcGISPro\bin\Python\envs\ArcGISPro-py3\lib\json\\ uuu init\uuu.py”,第312行,在加载中
s、 _u_类________;名称____;)
TypeError:JSON对象必须是str,而不是“bytes”
我将json.load()
更改为json.load
并删除了所有解码('utf-8')
,从而修复了您的错误。现在我遇到了另一个错误,因为在Python3中没有正确处理字符串格式。qs
变量的格式必须是“?where=&outFields=*&returnGeometry={}
格式(要添加到字符串中的变量)这就省去了大量关于编码问题的担忧。我仍然会在qs
字符串中遇到ascii
错误,但希望这能为您指明正确的方向。Python 3比2.7好10倍,非常值得付出努力。您能添加实际实例化类ESRIJSON
的代码吗我肯定能提供答案并自己快速测试你的代码。谢谢你的错误在这里:version=json.loads(webresp.decode('utf-8'))['currentVersion']你尝试了什么?-为什么你需要为此发布整个代码?可能尝试添加.content?webconn.getresponse().contentwebconn
是如何实例化的?根据请求添加了额外的代码。就我所做的尝试而言,我尝试在每个json.loads()
实例中添加.read().decode('utf-8')
,就像通常看到的那样。有趣的是,当我删除json.loads()
并切换到json.loads()
我得到了一个AttributeError:“bytes”对象没有属性“read”
。很抱歉。也删除了.read()。这也不是必需的。我也删除了,但忘了回答这个问题。您可以通过打印(版本)进行测试,在json.load()之后,它工作得很好,甚至可以打印(webresp)它。总是在你去看你在处理什么的时候打印你的数据。这是一个来自实际json模块的AttributeError
。文件“C:\ArcGISPro\bin\Python\envs\ArcGISPro-py3\lib\json\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\…对吗?老实说,你的代码太多了。我删除了每个.read.decode,并将.load替换为.load,并在加载到json后打印出响应对象,并在其中使用端点的数据进行良好打印。我没有更多要添加的内容。