Python从导入的模块中获取类的行号

2024-06-08 21:33:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用importlib从导入的python文件中获取模块,并希望获取python文件中定义每个类的行号。 例如,我有这样的东西:

testSpec = importlib.util.spec_from_file_location("", old_file)
testModule = importlib.util.module_from_spec(testSpec)
testSpec.loader.exec_module(testModule)

其中old_文件是一个python文件(我们称之为old.py)。然后使用inspect库,我可以通过以下方式从old.py中找到所有类:

for name, obj in inspect.getmembers(testModule):
    if inspect.isclass(obj):
        print(name)

这提供了从old.py创建的所有类名,这是正确的。但是,我想做的是获取这个类在old.py中出现的行号。我试图在print语句之后的if语句中添加这一行:print(inspect.getsourcelines(obj))

但是,这种错误可以通过以下方式排除:

File "old.py", line 665, in getfile
raise TypeError('{!r} is a built-in class'.format(object))
TypeError: <class '.exampleClassName'> is a built-in class

我不知道为什么它认为这个用户创建的类是一个内置类,但是有没有其他方法可以让我只获取old.py中定义这个类的行号?例如,如果old.py如下所示:

#test comment line 1
#test comment line 2

class exampleClassName:
    test = 0

然后,当我有类对象exampleClassName时,我希望从inspect.getsourcelines(obj)打印出4,因为它是在第4行定义的


Tags: 文件inpyobj定义lineimportlibold