On Mon, Nov 05, 2012 at 02:08:33AM +0000, Oscar Benjamin wrote:
There are certain cases where explicitly checking the version makes sense. I think that Python 3 vs Python 2 is sometimes such a case. Python 3 changes the meaning of a number of elementary aspects of Python so that the same code can run without error but with different semantics under the two different version series.
You can test for that without an explicit version check.
if isinstance(map(lambda x: x, ), list): # Python 2 semantics ... else: # Python 3 semantics ...
This now guards you against (e.g.) somebody backporting Python 3 semantics to "Python 2.8" (it's opensource, somebody could fork CPython), or running your code under "FooPython" which has 3.x semantics and a 1.x version number.
This is more work than just mechanically looking at the version number, but it's not that much more work, and is more reliable since it explicitly checks for the feature you want, rather than an implicit check based on the version number.
In any case, arguments about defensive coding style are getting off-topic. The point is that there are various ways to test for the existence of features, and adding yet another coarse-grained test "sys.py3k" doesn't gain us much (if anything).