当前位置:  开发笔记 > 编程语言 > 正文

Python 3.0 urllib.parse错误"类型str不支持缓冲区API"

如何解决《Python3.0urllib.parse错误"类型str不支持缓冲区API"》经验,为你挑选了2个好方法。

urllib正在尝试:

b'a,b'.split(',')

哪个不起作用.Py3k中的字节字符串和unicode字符串混合得比以前更加平滑 - 故意使编码问题尽快出错.

所以错误是不透明地告诉你'你不能将字节串传递给urllib.parse'.大概你正在做一个POST请求,其中表单编码的字符串作为内容体进入cgi; 内容正文仍然是一个字节字符串/流,所以它现在与新的urllib冲突.

所以,是的,它是cgi.py中的一个错误,是2to3转换的另一个受害者,没有为新的字符串模型正确修复.应该将传入的字节流转换为字符,然后再将它们传递给urllib.

我是否提到Python 3.0的库(尤其是与Web相关的库)仍然相当笨拙?:-)



1> bobince..:

urllib正在尝试:

b'a,b'.split(',')

哪个不起作用.Py3k中的字节字符串和unicode字符串混合得比以前更加平滑 - 故意使编码问题尽快出错.

所以错误是不透明地告诉你'你不能将字节串传递给urllib.parse'.大概你正在做一个POST请求,其中表单编码的字符串作为内容体进入cgi; 内容正文仍然是一个字节字符串/流,所以它现在与新的urllib冲突.

所以,是的,它是cgi.py中的一个错误,是2to3转换的另一个受害者,没有为新的字符串模型正确修复.应该将传入的字节流转换为字符,然后再将它们传递给urllib.

我是否提到Python 3.0的库(尤其是与Web相关的库)仍然相当笨拙?:-)



2> Martlark..:

从python教程(http://www.python.org/doc/3.0/tutorial/stdlib.html)中有一个使用urlopen方法的示例.它引发了同样的错误.

for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
    if 'EST' in line or 'EDT' in line:  # look for Eastern Time
        print(line)

您需要使用str函数将byte thingo转换为具有正确编码的字符串.如下:

for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
    lineStr = str( line, encoding='utf8' )
    if 'EST' in lineStr or 'EDT' in lineStr:  # look for Eastern Time
        print(lineStr)


提供适用于两个版本的python的解决方案将非常有趣.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有