On 7/26/07, Lisandro Dalcin <[EMAIL PROTECTED]> 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 _______________________________________________ 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