[Python-bugs-list] [ python-Bugs-661184 ] inspect.getsource bug

SourceForge.net noreply@sourceforge.net
Mon, 13 Jan 2003 18:24:24 -0800


Bugs item #661184, was opened at 2003-01-02 12:08
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=661184&group_id=5470

Category: Python Library
Group: Python 2.2.2
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Michele Simionato (michele_s)
Assigned to: Raymond Hettinger (rhettinger)
Summary: inspect.getsource bug

Initial Comment:
I have found a bug in inspect.getsource.
I am using Python 2.2.2 on Red-Hat 7.3. 
Here is the problem.

--begin bug.py

import inspect
def f(x): return x
print inspect.getsource(f)

--end bug.py

% python bug.py
Traceback (most recent call last):
  File "bug.py", line 3, in ?
    print inspect.getsource(f)
  File "/usr/local/lib/python2.2/inspect.py", line 520,
in getsource
    return string.join(lines, '')
  File "/usr/local/lib/python2.2/string.py", line 131,
in join
    return sep.join(words)
TypeError: sequence expected, NoneType found

Notice that
 
--begin noproblem.py

import inspect
def f(x): 
    return x
print inspect.getsource(f)

--end noproblem.py

works:

% python noproblem.py
def f(x):
    return x

I discovered this bug in trying to retrieve the source
code for lambda expressions: 

--begin lambda.py

import inspect
f=lambda x: x
print inspect.getsource(f) 

--begin lambda.py

(same error message).


--
Michele Simionato - Dept. of Physics and Astronomy
210 Allen Hall Pittsburgh PA 15260 U.S.A.
Phone: 001-412-624-9041 Fax: 001-412-624-9163
Home-page: http://www.phyast.pitt.edu/~micheles/




----------------------------------------------------------------------

>Comment By: Raymond Hettinger (rhettinger)
Date: 2003-01-13 21:24

Message:
Logged In: YES 
user_id=80475

I made my own cut at this and also found that the 
problem was the try/except fall-through returning None 
instead of the first line.  Also, I've added 'lambda' to 
regular expression search so that lambda's work as well 
as defs.  

The part that jvr commented out needs to stay in.  It starts 
at the first line of code and works its way back until the def 
is found, that way the comments and docstring get 
included.

Since Just and I independently arrived at the same 
analysis, considering this one solved.

Committed as Lib/inspect.py  1.40

Not recommending for backport because handling one 
liners is more featuresque than buglike.


----------------------------------------------------------------------

Comment By: Just van Rossum (jvr)
Date: 2003-01-03 06:58

Message:
Logged In: YES 
user_id=92689

It seems inspect.py indeed has problems finding one-line
functions. I've attached a patch that addresses this, but to
also make it work for lambda's I had to remove a few lines
that I don't quite understand the purpose of, as it seems to
work well without it. I've commented them out. Their purpose
seems to be to adjust co.co_firstlineno in case it's off,
it's just that I don't know how/when it can be off.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=661184&group_id=5470