Hi -- after updating my CVS tree today with Python 2.1a1, i ran the tests and test_inspect failed. This revealed that the format of code.co_varnames has changed. At first i tried to update the inspect.py module to check the Python version number and track the change, but now i believe this is actually symptomatic of a real interpreter problem. Consider the function: def f(a, (b, c), *d): x = 1 print a, b, c, d, x Whereas in Python 1.5.2: f.func_code.co_argcount = 2 f.func_code.co_nlocals = 6 f.func_code.co_names = ('x', 'a', 'b', 'c', 'd') f.func_code.co_varnames = ('a', '.2', 'd', 'b', 'c', 'x') In Python 2.1a1: f.func_code.co_argcount = 2 f.func_code.co_nlocals = 6 f.func_code.co_names = ('b', 'c', 'x', 'a', 'd') f.func_code.co_varnames = ('a', '.2', 'b', 'c', 'd', 'x') Notice how the ordering of the variable names has changed. I went and looked at the CO_VARARGS clause in eval_code2 to see if it put the varargs and kwdict arguments in different slots, but it appears unchanged! It still puts varargs at locals[co_argcount] and kwdict at locals[co_argcount + 1]. Please try: >>> def f(a, (b, c), *d): ... x = 1 ... print a, b, c, d, x ... >>> f(1, (2, 3), 4) 1 2 3 Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in f UnboundLocalError: local variable 'd' referenced before assignment >>> In Python 1.5.2, this prints "1 2 3 (4,)" as expected. I only have 1.5.2 and 2.1a1 to test. I hope this problem isn't present in 2.0... Note that test_inspect was the only test to fail! It might be the only test that checks anonymous and *varargs at the same time. (Yet another reason to put inspect in the core...) I did recently check in additions to test_extcall that made the test much beefier -- but that only tested combinations of regular, keyword, varargs, and kwdict arguments; it neglected to test anonymous (tuple) arguments as well. -- ?!ng
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4