Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Python urllib.request.urlopen:AttributeError:';字节';对象没有属性';数据';_Python_Python 3.x_Character Encoding_Urllib - Fatal编程技术网

Python urllib.request.urlopen:AttributeError:';字节';对象没有属性';数据';

Python urllib.request.urlopen:AttributeError:';字节';对象没有属性';数据';,python,python-3.x,character-encoding,urllib,Python,Python 3.x,Character Encoding,Urllib,我正在使用Python3并尝试连接到dstk。我在urllib包中遇到错误 我做了很多研究,所以没有发现任何类似的问题 api_url = self.api_base+'/street2coordinates' api_body = json.dumps(addresses) #api_url=api_url.encode("utf-8") #api_body=api_body.encode("utf-8") print(type(api_url)) response_string = six.

我正在使用Python3并尝试连接到
dstk
。我在
urllib
包中遇到错误

我做了很多研究,所以没有发现任何类似的问题

api_url = self.api_base+'/street2coordinates'
api_body = json.dumps(addresses)
#api_url=api_url.encode("utf-8")
#api_body=api_body.encode("utf-8")
print(type(api_url))
response_string = six.moves.urllib.request.urlopen(api_url, api_body).read()
response = json.loads(response_string)
如果我没有对
api_url
api_body
进行编码,我会得到以下结果:

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1247, in do_request_
    raise TypeError(msg)
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
但是,如果我尝试将它们编码为
utf-8
(取消行注释),则会出现以下错误:

 File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 514, in open
    req.data = data
AttributeError: 'bytes' object has no attribute 'data'

对我来说,这似乎是一个循环错误,我无法解决它。我确实尝试过从SO着手制定解决方案,将其更改为
json.load
等,但似乎没有任何效果。

您正在对url和请求正文进行编码,但只应对正文进行编码

这应该奏效:

api_url = self.api_base+'/street2coordinates'
api_body = json.dumps(addresses)
api_body=api_body.encode("utf-8")
response_string = six.moves.urllib.request.urlopen(api_url, api_body).read()
response = json.loads(response_string)
urlopen
的参数被传递给另一个类以创建一个opener,而这个类不知道它是被传递了一个url还是一个
请求
实例。因此,它检查“url”是否是字符串-如果“url”是字符串,它将创建一个
请求
,如果不是,它将假定“url”是一个
请求
实例,并尝试设置其数据属性,从而导致您看到的异常


有问题的代码是。

此外,我还添加了decode,它似乎出错了。