如何解决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_file 是一个 python 文件(我们称之为 old.py)。然后使用检查库,我可以通过这种方式从 old.py 中找到所有类:
for name,obj in inspect.getmembers(testModule):
if inspect.isclass(obj):
print(name)
这给了我所有从 old.py 创建的类名,这是正确的。但是,我还想做的是获取此类出现在 old.py 中的行号。我试图在打印语句之后的 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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。