[Python-3000] Release Countdown
Jim Jewett
jimjjewett at gmail.com
Sat Sep 1 01:18:12 CEST 2007
On 8/31/07, "Martin v. Löwis" <martin at v.loewis.de> wrote:
> >> Yuck, yuck about the source file encoding part. Also, there is no way
> >> to tell that a particular argument was passed a literal.
> > There is when compiling to bytecode; it goes in co_consts.
> >> The very
> >> definition of "this was a literal" is iffy -- is x a literal when
> >> passed to f below?
> >> x = "abc"
> >> f(x)
> > No, it isn't.
> By that definition, bytes never receives a constant.
To go back to the original motivation
x.split(":") # a constant, currently fails in Py3K
x.split(b":") # mechanical replacement for x.split(":")
sep=":"
x.split(sep) # annoying but less important failure
I would prefer that x.split(":") work.
If that happens because bytes.split does the conversion for me (so
that x.split(sep) also works), then great. But I realize that would
require an assumption about the proper encoding.
If it works because the bytecode compiler changes x.split(":") into
the moral equivalent of
try:
x.split(":")
except StrNotBytesError:
x.split(b":")
that is good enough. And for constants which appear as string
literals in the code (token stringliteral), the proper encoding is
known.
-jJ
More information about the Python-3000
mailing list