代码之家  ›  专栏  ›  技术社区  ›  Attila O.

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

  •  3
  • Attila O.  · 技术社区  · 14 年前

    python 2.5到2.7:

    #a.py:
    def foo():
        pass
    
    #b.py
    from a import foo
    foo()
    

    foo() ,我想知道它叫了本来 b “模块。我现在唯一能想到的方法是引发一个异常,捕获它并检查回溯(向上一级)。有没有一种自然的方法可以做到这一点?

    2 回复  |  直到 14 年前
        1
  •  3
  •   MattH    14 年前

    您可以使用检查模块执行此操作。

    例如。

    #!/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)
    
        2
  •  0
  •   Attila O.    14 年前

    但事实证明,解决办法是:

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