[Python-Dev] "buffer interface" messages

Georg Brandl g.brandl at gmx.net
Fri Dec 3 18:45:08 CET 2010


Am 03.12.2010 18:29, schrieb Antoine Pitrou:
> On Fri, 03 Dec 2010 18:09:39 +0100
> Georg Brandl <g.brandl at gmx.net> wrote:
>> Am 03.12.2010 17:57, schrieb Antoine Pitrou:
>> > On Sat, 4 Dec 2010 02:45:42 +1000
>> > Nick Coghlan <ncoghlan at gmail.com> wrote:
>> >> On Sat, Dec 4, 2010 at 2:28 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:
>> >> > On Fri, 03 Dec 2010 10:11:29 -0500
>> >> > "R. David Murray" <rdmurray at bitdance.com> wrote:
>> >> >> >
>> >> >> > >>> 'abc'.transform('hex')
>> >> >> > TypeError: 'str' does not support the buffer interface
>> >> >> > >>> b'abc'.transform('rot13')
>> >> >> > TypeError: expected an object with the buffer interface
>> >> >>
>> >> >> I find these 'buffer interface' error messages to be the most confusing
>> >> >> error message I get out of Python3 no matter what context they show up
>> >> >> in.  I have no idea what they are telling me.  That issue is more
>> >> >> general than transform/untransform, but perhaps it could be fixed
>> >> >> for transform/untransform in particular.
>> >> >
>> >> > I agree. "buffer interface" is a technicality that the Python user
>> >> > doesn't do about (unless (s)he also writes C extensions). How about
>> >> > "expected a bytes-compatible object"?
>> >> 
>> >> Why not "binary data interface"? That's what they're actually looking for.
>> > 
>> > I don't think it's more understandable, since it's not a well-known
>> > Python concept.
>> > (and in this specific case, the transform() method is on str and bytes,
>> > not on arbitrary bytes-like objects)
>> 
>> "object that can be handled as bytes"?
>> "object that provides bytes"?
>> 
>> >> It seems odd for 'rot13' to be throwing that error though.
>> > 
>> > Agreed.
>> 
>> rot13 is a str<->str codec.
> 
> Then why does it claim to expect an object with the buffer interface?
> bytes has the buffer interface, while str doesn't ;)

I'll leave it to you to figure it out.  (Hint: look at the traceback.)

> I'll also mention that getting a TypeError when you call a method with
> the correct type of argument is a bit surprising.

Why? The codec has the wrong type :)  But seriously, MAL already proposed
a bit more information on codecs, so that they can let it be known which
types they convert between.

Georg



More information about the Python-Dev mailing list