如何找到我的函数调用的文件或模块?

时间:2010-09-24 08:43:33

标签: python

Python 2.5到2.7:

#a.py:
def foo():
    pass

#b.py
from a import foo
foo()

foo()开始,我想知道它已在“b”模块中调用。我现在能想到的唯一方法就是提出异常,捕捉它并检查追溯(向上一级)。是否有一种母马自然的做法?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

没关系,事实证明解决方案是:

import traceback
traceback.extract_stack(limit=2))[0]