Why is string.letters different between python and bpython?
Asked Answered
E

1

6

I ran into a strange issue today. I was using the Python standard library's string module's letters variable and noticed that the result in bpython was not the same as the result in vanilla python.

I'm using Python 2.7.3 and bpython 0.10.1 and virtualenv 1.8.4. Here is what I'm seeing.

$ bpython
>>> import string
>>> string.letters
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'


$ python
>>> import string
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

I'm not sure that it matters but I'm running this on xubuntu 12.10.

Can someone please explain what is going on here?

Exempt answered 24/4, 2013 at 14:51 Comment(2)
my guess is they are just different implementations where one said string.letters = string.ascii_upper + string.ascii_lower and the other did string.letters = string.ascii_lower + string.ascii_upper, I dont think it will have any effect on any of your programs (unless you are trying to do string.letters[:26] or something)Ignominy
That's odd: using string.letters I get the same results as you, but using string.ascii_letters I get 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' in both python and bpython.Maxama
Y
4

From the docs, string.letters is defined as

The concatenation of the strings lowercase and uppercase described below. The specific value is locale-dependent, and will be updated when locale.setlocale() is called.

So it could be that your locale is different.

Yann answered 24/4, 2013 at 14:55 Comment(2)
I guess that could be right: bpython shows a locale of ('en_US', 'UTF-8') and python shows a locale of (None, None)Exempt
It turns out that the locale does not seem to affect it. I changed the locale in the python repl to ('en_US', 'UTF-8') and string.letters was the same.Exempt

© 2022 - 2024 — McMap. All rights reserved.