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

Viet Nguyen vhnguyenn at yahoo.com
Fri Oct 3 04:16:17 EDT 2014


On Friday, October 3, 2014 12:48:08 AM UTC-7, Peter Otten wrote:
> 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]:

Thanks Peter!



More information about the Python-list mailing list