File "/usr/local/lib/python3.0/cgi.py", line 477, in __init__ self.read_urlencoded() File "/usr/local/lib/python3.0/cgi.py", line 577, in read_urlencoded self.strict_parsing): File "/usr/local/lib/python3.0/urllib/parse.py", line 377, in parse_qsl pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] TypeError: Type str doesn't support the buffer API
有人可以指导我如何避免这种情况吗?我是通过将数据馈入来获得的cgi.Fieldstorage,但似乎无法通过其他任何方式来实现。
cgi.Fieldstorage
urllib正在尝试执行以下操作:
b'a,b'.split(',')
这不起作用。在Py3k中,字节字符串和unicode字符串的混合甚至比以前更加不平滑-故意使编码问题尽早出现错误。
因此错误相当不透明地告诉您“您无法将字节字符串传递给urllib.parse”。大概您正在执行POST请求,其中以形式编码的字符串作为内容主体进入cgi。内容主体仍然是字节字符串/流,因此现在与新的urllib冲突。
是的,这是cgi.py中的错误,这是2to3转换的另一个受害者,尚未针对新的字符串模型正确修复。它应该将传入的字节流转换为字符,然后再将其传递给urllib。
我是否提到过Python 3.0的库(尤其是与Web相关的库)仍然相当笨拙?:-)