小编典典

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

python

  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,但似乎无法通过其他任何方式来实现。


阅读 135

收藏
2020-12-20

共1个答案

小编典典

urllib正在尝试执行以下操作:

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

这不起作用。在Py3k中,字节字符串和unicode字符串的混合甚至比以前更加不平滑-故意使编码问题尽早出现错误。

因此错误相当不透明地告诉您“您无法将字节字符串传递给urllib.parse”。大概您正在执行POST请求,其中以形式编码的字符串作为内容主体进入cgi。内容主体仍然是字节字符串/流,因此现在与新的urllib冲突。

是的,这是cgi.py中的错误,这是2to3转换的另一个受害者,尚未针对新的字符串模型正确修复。它应该将传入的字节流转换为字符,然后再将其传递给urllib。

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

2020-12-20