gpt4 book ai didi

Python urllib.request.urlopen : AttributeError: 'bytes' object has no attribute 'data'

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:05 25 4
gpt4 key购买 nike

我正在使用 Python 3 并尝试连接到 dstkurllib 包出现错误。

我对 SO 进行了很多研究,但找不到与此问题类似的问题。

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_urlapi_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 还是一个 Request 实例。所以它检查“url”是否是一个字符串——如果“url”是一个字符串,它创建一个Request,如果不是它假设“url”是一个Request 实例并尝试设置其数据属性,导致您看到的异常。

有问题的代码是here .

关于Python urllib.request.urlopen : AttributeError: 'bytes' object has no attribute 'data' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com