この単純なPythonプログラムをラムダコードを点検し、私がコピーした場合Pythonインタプリタから、より複雑なコードベースから抽出された
$ 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
プレーンなPythonインタプリタ、それは動作します!
なぜ誰が知っていますか?
私は、Windows7ではPython 3.5 32ビットを使用します。
これは、inspectモジュールが実際に行って、インタプリタが追跡するソースファイルを探すためです。インターフェイスには、行番号、定義の前のコメントなども表示できることに注意してください。REPLに入っているときは、これらのどれも存在しません。 IPythonはインタラクティブなケースでinspectが正しく動作するようにいくつかの魔法を使っていると思います。 – pvg