[Python-3000] interaction between locals, builtins and except clause
Eduardo "EdCrypt" O. Padoan
eopadoan at altavix.com
Thu Jul 26 19:27:11 CEST 2007
On 7/26/07, Lisandro Dalcin <dalcinl at gmail.com> wrote:
> Porting to Py3K, I modified a function like the followin, using a
> trick for it working in Py2.x .
>
> def __iter__(self):
> if self == _mpi.INFO_NULL:
> return
> try: range = xrange
> except: pass
> nkeys = _mpi.info_get_nkeys(self)
> for nthkey in range(nkeys):
> yield _mpi.info_get_nthkey(self, nthkey)
>
> However, I've got in my unittests (running with py3k)
>
> ERROR: testPyMethods (__main__.TestInfo)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "tests/unittest/test_info.py", line 123, in testPyMethods
> for key in INFO:
> File "/u/dalcinl/lib/python/mpi4py/MPI.py", line 937, in __iter__
> for nthkey in range(nkeys):
> UnboundLocalError: local variable 'range' referenced before assignment
>
>
> I am not completelly sure if this is expected (it is, regarding
> implementation, but perhaps not regarding Python as a language), so
> I post this for your consideration.
>
Python thinnks range is local, because you referenced it, even if an
error ocurred. Use 'global range' at the top of the file.
But, as I understand, you are trying to target both Python 2.x and 3
with the same code, using tricks like this one. I think that, even if
you succeed, the resulting code will be quite unmaintainable.
--
EduardoOPadoan (eopadoan->altavix::com)
Bookmarks: http://del.icio.us/edcrypt
More information about the Python-3000
mailing list