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