Is there a way to display source code for Python function?

Peter Otten __peter__ at web.de
Fri Oct 3 03:47:31 EDT 2014


Viet Nguyen wrote:

> On Thursday, October 2, 2014 10:34:15 PM UTC-7, Viet Nguyen wrote:
>> Hi,
>> 
>> 
>> 
>> When I am debug mode, is there some command which will help display the
>> source code for a Python function of interest?  Much like you'd use "info
>> proc" to display contents of Tcl proc.
>> 
>> 
>> 
>> Thanks,
>> 
>> Viet
> 
> I tried this:
>>>> def func(a):
> ...   a = 'abcd'
> 
> 
>>>> inspect.getsource(func)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/sw/packages/python/current/lib/python2.7/inspect.py", line 701,
>   in getsource
>     lines, lnum = getsourcelines(object)
>   File "/sw/packages/python/current/lib/python2.7/inspect.py", line 690,
>   in getsourcelines
>     lines, lnum = findsource(object)
>   File "/sw/packages/python/current/lib/python2.7/inspect.py", line 538,
>   in findsource
>     raise IOError('could not get source code')
> IOError: could not get source code
> 
>>>> inspect.getsourcelines(func)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/sw/packages/python/current/lib/python2.7/inspect.py", line 690,
>   in getsourcelines
>     lines, lnum = findsource(object)
>   File "/sw/packages/python/current/lib/python2.7/inspect.py", line 538,
>   in findsource
>     raise IOError('could not get source code')
> IOError: could not get source code
> 
> What is wrong?

The source of func is compiled and immediately discarded by the interactive 
interpreter. inspect.getsource() only works if the source code is available 
(as a module):

$ cat ham.py
def spam():
    return 42
$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ham, inspect
>>> print(inspect.getsource(ham.spam))
def spam():
    return 42

>>> 

There is an alternative interactive interpreter called ipython that allows 
you to retrieve a function definition:

In [1]: def foo():
   ...:     return bar
   ...: 

In [2]: %psource foo
def foo():
    return bar

In [3]: 






More information about the Python-list mailing list