I think I found a bug in Python 2.6.4 (in the inspect module)

Lie Ryan lie.1296 at gmail.com
Wed Dec 30 23:11:24 EST 2009


On 12/30/2009 9:10 AM, inhahe wrote:
> Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import inspect
>>>> def a(b=1): pass
> ....
>>>> inspect.getargvalues(a)
> Traceback (most recent call last):
>    File "<stdin>", line 1, in<module>
>    File "C:\Python26\lib\inspect.py", line 816, in getargvalues
>      args, varargs, varkw = getargs(frame.f_code)
> AttributeError: 'function' object has no attribute 'f_code'
>>>> dir(a)
> ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr_
> _', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globa
> ls__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__'
> , '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subcla
> sshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc'
> , 'func_globals', 'func_name']
>>>>
>
> So i'm guessing that the attribute has been changed from func_code to
> f_code but the inspect module wasn't updated to reflect that.

No, that wasn't the case. The argument of inspect.getargvalues() is a 
'frame object' not 'function object'.

e.g.:
 >>> inspect.getargvalues(inspect.currentframe())

You could argue that the error message is misleading (should be 
TypeError instead), do you want a bug report on that?



More information about the Python-list mailing list