[Python-Dev] email package status in 3.X (original) (raw)

Michael Urman murman at gmail.com
Mon Jun 21 18:03:30 CEST 2010


On Mon, Jun 21, 2010 at 09:51, P.J. Eby <pje at telecommunity.com> wrote:

The issue is, I'd like to have an idempotent incantation that I can use to make the inputs and outputs to stdlib functions behave in a type-safe manner with respect to bytes, in cases where bytes are really what I want operated on.

Note too that this is an argument for symmetry in wrapping the inputs and outputs, so that the code doesn't have to "know" what it's dealing with!

It is somewhat troublesome that there doesn't appear to be an obvious built-in idempotent-when-possible function that gives back the provided bytes/str, or converts to the requested type per the listed encoding (as of 3.1.2). Would it be useful to make the second versions of these work, or would that return us to the confusion of the 2.x era? On the other hand, since these are all TypeErrors instead of UnicodeErrors, it's an easy wrapper to write.

>>> bytes('abc', 'latin-1')
b'abc'
>>> bytes(b'abc', 'latin-1')
TypeError: encoding or errors without a string argument

>>> str(b'abc', 'latin-1')
'abc'
>>> str('abc', 'latin-1')
TypeError: decoding str is not supported

Interestingly the online docs for str say it can decode either a byte string or a character buffer, a term which doesn't yield a definition in a search; apparently either a string is not a character buffer, or the docs are incorrect. http://docs.python.org/py3k/library/functions.html?highlight=str#str

However it looks like this is consistent with int. >>> int(4, 0) TypeError: int() can't convert non-string with explicit base

-- Michael Urman



More information about the Python-Dev mailing list