[Python-checkins] cpython (3.4): Address some comments from Nick Coghlan

brett.cannon python-checkins at python.org
Fri Dec 12 21:14:18 CET 2014


https://hg.python.org/cpython/rev/59a09c60f939
changeset:   93859:59a09c60f939
branch:      3.4
parent:      93855:aba5f771f5ec
user:        Brett Cannon <brett at python.org>
date:        Fri Dec 12 15:13:43 2014 -0500
summary:
  Address some comments from Nick Coghlan

files:
  Doc/howto/pyporting.rst |  31 +++++++++++++++++++++-------
  1 files changed, 23 insertions(+), 8 deletions(-)


diff --git a/Doc/howto/pyporting.rst b/Doc/howto/pyporting.rst
--- a/Doc/howto/pyporting.rst
+++ b/Doc/howto/pyporting.rst
@@ -30,16 +30,18 @@
 
 #. Update your code to drop support for Python 2.5 or older (supporting only
    Python 2.7 is ideal)
-#. Make sure you have good test coverage (coverage.py_ can help)
+#. Make sure you have good test coverage (coverage.py_ can help;
+   ``pip install coverage``)
 #. Learn the differences between Python 2 & 3
-#. Use Modernize_ or Futurize_ to update your code
+#. Use Modernize_ or Futurize_ to update your code (``pip install modernize`` or
+   ``pip install future``, respectively)
 #. Use Pylint_ to help make sure you don't regress on your Python 3 support
-   (if only supporting Python 2.7/3.4 or newer)
+   (if only supporting Python 2.7/3.4 or newer; ``pip install pylint``)
 #. Use caniusepython3_ to find out which of your dependencies are blocking your
-   use of Python 3
+   use of Python 3 (``pip install caniusepython3``)
 #. Once your dependencies are no longer blocking you, use continuous integration
    to make sure you stay compatible with Python 2 & 3 (tox_ can help test
-   against multiple versions of Python)
+   against multiple versions of Python; ``pip install tox``)
 
 If you are dropping support for Python 2 entirely, then after you learn the
 differences between Python 2 & 3 you can run 2to3_ over your code and skip the
@@ -71,8 +73,9 @@
 While you can make Python 2.5 work with Python 3, it is **much** easier if you
 only have to work with Python 2.6 or newer (and easier still if you only have
 to work with Python 2.7). If dropping Python 2.5 is not an option then the six_
-project can help you support Python 2.5 & 3 simultaneously. Do realize, though,
-that nearly all the projects listed in this HOWTO will not be available to you.
+project can help you support Python 2.5 & 3 simultaneously
+(``pip install six``). Do realize, though, that nearly all the projects listed
+in this HOWTO will not be available to you.
 
 If you are able to only support Python 2.6 or newer, then the required changes
 to your code should continue to look and feel like idiomatic Python code. At
@@ -115,7 +118,8 @@
 you want to look out for while you code, you will want to learn what changes
 Python 3 makes in terms of Python 2. Typically the two best ways of doing that
 is reading the `"What's New"`_ doc for each release of Python 3 and the
-`Porting to Python 3`_ book (which is free online).
+`Porting to Python 3`_ book (which is free online). There is also a handy
+`cheat sheet`_ from the Python-Future project.
 
 
 Update your code
@@ -245,6 +249,16 @@
 module is consistent from Python 2 to 3 while the built-in :func:`open` function
 is not (in Python 3 it's actually :func:`io.open`).
 
+The constructors of both ``str`` and ``bytes`` have different semantics for the
+same arguments between Python 2 & 3. Passing an integer to ``bytes`` in Python 2
+will give you the string representation of the integer: ``bytes(3) == '3'``.
+But in Python 3, an integer argument to ``bytes`` will give you a bytes object
+as long as the integer specified, filled with null bytes:
+``bytes(3) == b'\x00\x00\x00'``. A similar worry is necessary when passing a
+bytes object to ``str``. In Python 2 you just get the bytes object back:
+``str(b'3') == b'3'``. But in Python 3 you get the string representation of the
+bytes object: ``str(b'3') == "b'3'"``.
+
 Finally, the indexing of binary data requires careful handling (slicing does
 **not** require any special handling). In Python 2,
 ``b'123'[1] == b'2'`` while in Python 3 ``b'123'[1] == 50``. Because binary data
@@ -362,6 +376,7 @@
 
 .. _2to3: https://docs.python.org/3/library/2to3.html
 .. _caniusepython3: https://pypi.python.org/pypi/caniusepython3
+.. _cheat sheet: http://python-future.org/compatible_idioms.html
 .. _coverage.py: https://pypi.python.org/pypi/coverage
 .. _Futurize: http://python-future.org/automatic_conversion.html
 .. _Modernize:

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list