[Python-3000] interaction between locals, builtins and except clause

Nick Coghlan ncoghlan at gmail.com
Fri Jul 27 12:20:09 CEST 2007


Lisandro Dalcin wrote:
> I think it should work in any 2x and 3K. Is this right? Perhaps this
> trick could be used for some automated conversion tool targeting
> backward compatibility with 2.x series.

The backwards compatible version looks like this:

     def __iter__(self):
          if self == _mpi.INFO_NULL:
              return
          nkeys = _mpi.info_get_nkeys(self)
          for nthkey in xrange(nkeys):
              yield _mpi.info_get_nthkey(self, nthkey)

The 2to3 converter will automatically convert the xrange() call to a 
range() call for the Py3k version.

If you want to persist in trying to get the same code running on both 
Py3k and 2.x without using the 2->3 converter, then I suggest 
segregating it all into a compatibility module and do:

   from py3k_compat import _range

The try/except code to determine how to set _range would then occur only 
once, regardless of the number of places where you used it.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-3000 mailing list