At 05:49 PM 6/21/2010 +0100, Michael Foord wrote:
Why is your proposed bstr wrapper not practical to implement outside
the core and use in your own libraries and frameworks?
__contains__ doesn't have a converse operation, so you can't code a
type that works around this (Python 3.1 shown):
>>> from os.path import join
>>> join(b'x','y')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python31\lib\ntpath.py", line 161, in join
if b[:1] in seps:
TypeError: Type str doesn't support the buffer API
>>> join('y',b'x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python31\lib\ntpath.py", line 161, in join
if b[:1] in seps:
TypeError: 'in <string>' requires string as left operand, not bytes
IOW, only one of these two cases can be worked around by using a bstr
(or ebytes) that doesn't have support from the core string type.
I'm not sure if the "in" operator is the only case where implementing
such a type would fail, but it's the most obvious one. String
formatting, of both the % and .format() varieties is
another. (__rmod__ doesn't help if your bytes object is one of
several data items in a tuple or dict -- the common case for % formatting.)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com