Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3开放问题_Python_Json - Fatal编程技术网

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().content
webconn
是如何实例化的?根据请求添加了额外的代码。就我所做的尝试而言,我尝试在每个
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后打印出响应对象,并在其中使用端点的数据进行良好打印。我没有更多要添加的内容。