在Python中查找函数的文件名和文件路径

时间:2018-09-04 23:06:37

标签: python python-2.7 traceback

我有大量的python文件,其中的类也继承和覆盖了方法。我正在跟踪函数的调用。有没有办法可以在不实际调用函数的情况下(例如,仅通过传递对象和函数名称)获取函数的详细信息(文件位于哪个文件中)?

不要忘记对象是动态的。因此,仅列出项目的所有函数名称是没有用的。

文件1:

class ABC(DEF):
    def Start(self):
        pass

文件2:

class XYZ(DEF):
    def Start(self):
        pass

文件n:

class PQR(AQZ):
    def Activity(self):
        obj = ABC()
        # How to know in which file, the function Start is defined
        obj.Start()

1 个答案:

答案 0 :(得分:1)

看看the inspect module。它并不总是能正常工作(用C实现的内建函数不一定具有行号,甚至不必关联文件,因为sys之类的某些模块已烘焙到核心解释器中,而不是作为单独的文件分发),但这是最接近您要寻找的东西。

更新示例以提供有关事物起源的信息:

import inspect

class PQR(AQZ):
     def Activity(self):
        obj = ABC()
        # How to know in which file, the function Start is defined
        try:
            _, lineno = inspect.getsourcelines(obj.Start)
            srcfile = inspect.getsourcefile(obj.Start)
        except TypeError:
            print("{!r} is a built-in".format(obj.Start))
        else:
            print("{!r} comes from {!r}, line {}".format(obj.Start, srcfile, lineno))
        obj.Start()