Python 3.0 urllib.parse.parse_qs results in TypeError
John Machin
sjmachin at lexicon.net
Wed Jan 21 16:32:30 EST 2009
On Jan 22, 2:17 am, a... at pythoncraft.com (Aahz) wrote:
> In article <313a27f9-c655-4fc4-a8e3-568a4283b... at f40g2000pri.googlegroups.com>,
>
> ag73 <andygrov... at gmail.com> wrote:
>
> > form = urllib.parse.parse_qs(qs, keep_blank_values=1)
>
> >However, the last line of code that calls parse_qs causes the
> >following exception to be thrown:
>
> ><class 'TypeError'>
> >Type str doesn't support the buffer API
>
> One of the key features of Python 3.0 is the fact that it now
> distinguishes between bytes and strings. Unfortunately, there are a lot
> of ambiguous areas where the correct handling is not clear; for example,
> nobody has yet agreed whether URLs are strings or bytes. As you
> discovered, forced conversion to string seems to work here and I suggest
> you make that your workaround.
However I'm surprised on further reflection that that workaround
works; it must be only accidental.
"""if I pass in "str(qs)" instead of
"qs" then the call works."""
BUT str(bytes_instance) with no other args passed *doesn't* just do a
decoding: """When only object is given, this returns its nicely
printable representation."""
The nicely printable representation for bytes objects includes:
* wrapping it in b''
* showing non-ASCII characters as \xdd
3.0:
>>> len(str(b'abc'))
6
>>> len(str(b'abc', encoding='ascii'))
3
>>> len(str(b'\xff'))
7
>>> len(str(b'\xff', encoding='ascii'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't d
More information about the Python-list
mailing list