Movatterモバイル変換


[0]ホーム

URL:


[Python-Dev] Anonymous + varargs: possible serious breakage -- please confirm!

Ka-Ping Yeeping@lfw.org
Wed, 24 Jan 2001 12:33:43 -0800 (PST)


Hi -- after updating my CVS tree today with Python 2.1a1, i ranthe tests and test_inspect failed.  This revealed that the formatof code.co_varnames has changed.  At first i tried to update theinspect.py module to check the Python version number and track thechange, but now i believe this is actually symptomatic of a realinterpreter problem.Consider the function:    def f(a, (b, c), *d):        x = 1        print a, b, c, d, xWhereas 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 tosee if it put the varargs and kwdict arguments in differentslots, but it appears unchanged!  It still puts varargs atlocals[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 problemisn't present in 2.0...Note that test_inspect was the only test to fail!  It might be theonly 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 thetest much beefier -- but that only tested combinations of regular,keyword, varargs, and kwdict arguments; it neglected to testanonymous (tuple) arguments as well.-- ?!ng


[8]ページ先頭

©2009-2025 Movatter.jp