Issue 661184: inspect.getsource bug - Python tracker (original) (raw)

Issue661184

Created on 2003-01-02 17:08 by michele_s, last changed 2022-04-10 16:06 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
inspect.patch jvr,2003-01-03 11:58
Messages (3)
msg13815 - (view) Author: Michele Simionato (michele_s) Date: 2003-01-02 17:08
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/
msg13816 - (view) Author: Just van Rossum (jvr) * (Python triager) Date: 2003-01-03 11:58
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.
msg13817 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2003-01-14 02:24
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.
History
Date User Action Args
2022-04-10 16:06:05 admin set github: 37690
2003-01-02 17:08:12 michele_s create