[Python-Dev] Smoothing the transition from Python 2 to 3 (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Fri Jun 10 14:00:00 EDT 2016


On 10 June 2016 at 07:09, Cody Piersall <cody.piersall at gmail.com> wrote:

One problem is that the str literals should be bytes literals. Comparison with None needs to be avoided.

With Python 2 code runs successfully. With Python 3 the code crashes with a traceback. With my modified Python 3.6, the code runs successfully but generates the following warnings: test.py:13: DeprecationWarning: encoding bytes to str output.write('%d:' % len(s)) test.py:14: DeprecationWarning: encoding bytes to str output.write(s) test.py:15: DeprecationWarning: encoding bytes to str output.write(',') test.py:5: DeprecationWarning: encoding bytes to str if c == ':': test.py:9: DeprecationWarning: encoding bytes to str size += c test.py:24: DeprecationWarning: encoding bytes to str data = data + s test.py:26: DeprecationWarning: encoding bytes to str if input.read(1) != ',': test.py:31: DeprecationWarning: default compare is depreciated if a > 0: This seems very useful; I'm surprised that other people don't think so too. Currently, the easiest way to find bytes/str errors in a big application is by running the program, finding where it crashes, fixing that one line (or hopefully wherever the data entered the system if you can find it), and repeating the process.

It could be very interesting to add an "ascii-warn" codec to Python 2.7, and then set that as the default encoding when the -3 flag is set. The expressed lack of interest has been in the idea of recommending people use an alternate interpreter build (which has nothing to do with the usefulness of the added warnings, and everything to do with the logistics of distributing and adopting alternate runtimes), rather than in the concept of improving the available runtime compatibility warnings.

Cheers, Nick.

-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia



More information about the Python-Dev mailing list