根据你的说法,你正在运行 python3 (作为StringIO
包已重命名io
在 python3 中,而不是 python2 中),您的示例是 python2 (出于明显的原因)。
所以对于你的问题:
"TypeError:initial_value must be str or None, not bytes".
这意味着:
response = requests.get('http://www.github.com')
你要么得到None
或回复bytes
for response.content
。鉴于您的请求有效,您可以访问response.content
,很有可能是在bytes
.
As the requests
库在相当低的级别上工作,所有传入和传入套接字(包括 HTTP 套接字)的数据都是纯二进制(即未解释),为了能够在字符串函数中使用输出,您需要将其转换为某种东西。
在Python3中str
是旧的unicode
来自 python2,以及bytes
接近旧的str
的Python2。那么你would需要将字节转换为字符串来提供StringIO
:
i = Image.open(StringIO(response.content.decode('utf-8')))
例如。但接下来我期待着Image.open()
对你大喊大叫,它不知道它应该如何处理 unicode 缓冲区,它真正想要的只是一个字节数组!
但是因为Image.open()
实际上期待的是字节流,而不是 unicode 流,你shall正在做的实际上是使用BytesIO
代替StringIO
:
from io import BytesIO
i = Image.open(BytesIO(response.content))
最后,您很乐意给出一个示例,但这不是一个可行的示例,因为您提供的是 HTML 页面而不是图像的链接。
HTH