我一直在使用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行定义的
一个选项是使用
open
和.readline()
循环文件,查看行与class
匹配的位置,然后将行(计数)编号和类名保存到dict
中相关问题 更多 >
编程相关推荐