r/Python • • May 26 '14

Python 3 is killing Python

https://medium.com/@deliciousrobots/5d2ad703365d/
0 Upvotes

147 comments sorted by

View all comments

Show parent comments

4

u/mitsuhiko Flask Creator May 26 '14

I assume you have no idea what you are talking about.

I mean, you're opening a text file without explicitly specifying an encoding. The only reason you think it "works" on 2 is because it doesn't actually open files in text mode. (In fact, is that even possible without using the backported io module or writing a custom wrapper?)

If you open a file in text mode in Python 2 you open it to return bytes. If you open a file in text mode in Python 3 the interpreter will ask the environment what the encoding is. Which it turns out, is a pretty terrible idea. You should be explicit. Unfortunately there are cases now in Python 3 where you cannot be explicit because the interpreter already "solved" the problem for you. Incorrectly.

1

u/[deleted] May 26 '14

If you open a file in text mode in Python 2 you open it to return bytes.

That makes no sense. If it returns bytes, then it's in binary mode. If it were in text mode, it'd return unicode objects. (And please don't say that the difference between "text" and "binary" is solely whether the CRLF-to-LF conversion is enabled or not.)

Unfortunately there are cases now in Python 3 where you cannot be explicit

open has a keyword argument encoding. You can always be explicit.

5

u/mitsuhiko Flask Creator May 26 '14

That makes no sense.

That does not change that this is how the default API in Python 2 works. It's by far not the only API to open files in 2.x. That however was not the point.

open has a keyword argument encoding. You can always be explicit.

a) people are not. b) not every api supports that. Case in point: filenames, environment variables and argv.