[Python-Dev] Smoothing the transition from Python 2 to 3 (original) (raw)
Brett Cannon brett at python.org
Thu Jun 9 19:43:24 EDT 2016
- Previous message (by thread): [Python-Dev] Smoothing the transition from Python 2 to 3
- Next message (by thread): [Python-Dev] Smoothing the transition from Python 2 to 3
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, 9 Jun 2016 at 16:08 Neil Schemenauer <neil at python.ca> wrote:
On 2016-06-09, Brett Cannon wrote: > On Thu, 9 Jun 2016 at 14:56 Nick Coghlan <ncoghlan at gmail.com> wrote: > > Once you switch to those now recommended more conservative migration > > tools, the tool suite you request already exists: > > > > - update your code with modernize or futurize > > - check it still runs on Python 2.7 > > - check it doesn't generate warnings under 2.7's "-3" switch > > - check it passes "pylint --py3k" > > - check if it runs on Python 3.5 > > > >
python3.5 -bb
is best to help keep Python 2.7 compatibility, otherwise > what Nick said. :)I have to wonder if you guys actually ported at lot of Python 2 code.
Yes I have, including code that needed to be 2.4-3.4 compatible of all things. Plus I'm the author of the porting HOWTO so I know the edge cases pretty well.
I don't think you meant for what you said to sound insulting, Neil, but it did feel like it upon first reading.
Maybe you somehow avoided the problematic behavior. Below is a pretty trival set of functions. The tools you recommend do not help at all. One problem is that the str literals should be bytes literals.
At least for Modernize that's on purpose as it can't tell semantically what is meant to be binary data vs. textual ASCII data (which you obviously know, else you wouldn't be trying to add runtime warnings for this sort of stuff).
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: It is very easy for me to find code written for Python 2 that will fail in the same way. According to you guys, there is no problem and we already have good enough tooling. ;-(
That's not what I'm saying at all (nor what I think Nick is saying); more tooling to ease the transition is always welcomed. The point we are trying to make is 2to3 is not considered best practice anymore, and so targeting its specific output might not be the best use of your time. I'm totally happy to have your fork work out and help give warnings for situations where runtime semantics are the only way to know there will be a problem that static analyzing tools can't handle and have the porting HOWTO updated so that people can run their test suite with your interpreter to help with that final bit of porting. I personally just don't want to see you waste time on warnings that are handled by the tools already or ignore the fact that six, modernize, and futurize can help more than 2to3 typically can with the easy stuff when trying to keep 2/3 compatibility. IOW some of us have become allergic to the word "2to3" in regards to porting. :) But if you want to target 2to3 output then by all means please do and your work will still be appreciated.
And I should also mention in case you don't know -- and assuming I'm remembering correctly -- that adding new Py3kWarning cases to Python 2.7 is still allowed, so if there is a warning you want to add that makes sense to be upstream then we can consider adding it in Python 2.7.12 (or later). -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20160609/781bb70e/attachment-0001.html>
- Previous message (by thread): [Python-Dev] Smoothing the transition from Python 2 to 3
- Next message (by thread): [Python-Dev] Smoothing the transition from Python 2 to 3
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]