Lisandro Dalcin schrieb: > 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.
Yes, this is expected. By an assignment to range anywhere in a function scope, the name is marked as a local and won't ever be looked up in the global namespace. I'd move the range = xrange part at the module top, or just bring the 2.x version in a state where one run of 2to3 produces a working 3.0 version. HTH, Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com