3
的Python 2.5〜2.7:如何找出哪個文件或模塊是我的函數?
#a.py:
def foo():
pass
#b.py
from a import foo
foo()
從foo()
,我想知道它有鴨舌稱爲 「b
」 模塊中。我現在唯一能想到的方法就是引發一個異常,捕捉異常並檢查回溯(上升一級)。是否有一種很自然的方式來做到這一點?
的Python 2.5〜2.7:如何找出哪個文件或模塊是我的函數?
#a.py:
def foo():
pass
#b.py
from a import foo
foo()
從foo()
,我想知道它有鴨舌稱爲 「b
」 模塊中。我現在唯一能想到的方法就是引發一個異常,捕捉異常並檢查回溯(上升一級)。是否有一種很自然的方式來做到這一點?
您可以用檢查模塊做到這一點。
E.g.
#!/usr/bin/env python
# a.py
import inspect
def foo():
for item in inspect.stack():
print item
-
#!/usr/bin/env python
# b.py
from a import foo
foo()
-
$ python b.py
(<frame object at 0x2026fb0>, '/home/tdb/a.py', 6, 'foo', [' for item in inspect.stack():\n'], 0)
(<frame object at 0x1fe4a30>, 'b.py', 5, '<module>', ['foo()\n'], 0)
沒關係,原來的解決方案是:
import traceback
traceback.extract_stack(limit=2))[0]
我覺得這個【答案】(http://stackoverflow.com/a/13142074/355230)可能會奏效。 – martineau 2012-10-31 06:13:14
@martineau yup,似乎使用_getframe(2)比遍歷整個堆棧更高效。謝謝。 – 2012-10-31 07:19:30