2010-09-24 41 views
3

的Python 2.5〜2.7:如何找出哪個文件或模塊是我的函數?

#a.py: 
def foo(): 
    pass 

#b.py 
from a import foo 
foo() 

foo(),我想知道它有鴨舌稱爲 「b」 模塊中。我現在唯一能想到的方法就是引發一個異常,捕捉異常並檢查回溯(上升一級)。是否有一種很自然的方式來做到這一點?

+0

我覺得這個【答案】(http://stackoverflow.com/a/13142074/355230)可能會奏效。 – martineau 2012-10-31 06:13:14

+0

@martineau yup,似乎使用_getframe(2)比遍歷整個堆棧更高效。謝謝。 – 2012-10-31 07:19:30

回答

3

您可以用檢查模塊做到這一點。

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) 
0

沒關係,原來的解決方案是:

import traceback 
traceback.extract_stack(limit=2))[0] 
相關問題