3
是从更复杂的代码库中提取这个简单的Python程序:检查拉姆达代码
#insp.py
import inspect
L = lambda x: x+1
print("L(10)=" + str(L(10)))
code = inspect.getsource(L)
print(code)
作品,如果我在命令行中运行它:
$ python insp.py
如果我复制和粘贴python解释器中的每行失败:
d:\>python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect
>>> L = lambda x: x+1
>>> print("L(10)=" + str(L(10)))
L(10)=11
>>> code = inspect.getsource(L)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "d:\Users\Cimino\AppData\Local\Programs\Python\Python35-32\Lib\inspect.py", line 944, in getsource
lines, lnum = getsourcelines(object)
File "d:\Users\Cimino\AppData\Local\Programs\Python\Python35-32\Lib\inspect.py", line 931, in getsourcelines
lines, lnum = findsource(object)
File "d:\Users\Cimino\AppData\Local\Programs\Python\Python35-32\Lib\inspect.py", line 762, in findsource
raise OSError('could not get source code')
OSError: could not get source code
请注意,使用IPython而不是普通的Python解释器,它的工作原理!
有人知道为什么吗?
我在Windows7下使用Python 3.5 32位。
我想这是因为检查模块实际上去寻找解释器跟踪的源文件。注意接口也可以给你行号,定义之前的注释等。当你在REPL中时,这些都不存在。我想象IPython会做一些魔术来确保在交互式案例中检查能够正常工作。 – pvg