bug in inspect.getsource
Bengt Richter
bokr at oz.net
Thu Dec 26 16:54:36 EST 2002
More information about the Python-list mailing list
Thu Dec 26 16:54:36 EST 2002
- Previous message (by thread): Arguments for using Python
- Next message (by thread): bug in inspect.getsource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 26 Dec 2002 09:33:44 -0800, mis6 at pitt.edu (Michele Simionato) wrote: >It seems 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 like f=lambda x: x (same error message). >For lambda expression I don't know a workaround as that in >noproblem.py. Any hint ? > > You could try this change until someone can very it: (I am too tired not to have overlooked something, but it seems to get past the bug file). --- origlib\inspect.py Sun Mar 17 12:51:30 2002 +++ lib\inspect.py Thu Dec 26 13:57:43 2002 @@ -484,11 +484,18 @@ if type == tokenize.NAME: self.started = 1 elif type == tokenize.NEWLINE: self.last = srow + self.started = 2 # look for indent or new block at level 0 ?? elif type == tokenize.INDENT: self.indent = self.indent + 1 elif type == tokenize.DEDENT: self.indent = self.indent - 1 if self.indent == 0: raise EndOfBlock, self.last + elif self.started == 2: + if type not in (tokenize.NL, tokenize.COMMENT): + self.started = 1 + if self.indent == 0: raise EndOfBlock, self.last + if type == tokenize.ENDMARKER: + raise EndOfBlock, self.last def getblock(lines): """Extract the block of code at the top of the given list of lines.""" Regards, Bengt Richter
- Previous message (by thread): Arguments for using Python
- Next message (by thread): bug in inspect.getsource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list