我想获取源代码中python函数的行号。
我在运行时拥有的是模块、类、方法对象
看过检查
inspect.getsourcelines(object)
这也给出了结果中的行号。
我看到对于带有装饰器的方法,第 1 行。从上面的检查函数返回指向实际装饰器的源代码而不是所需函数的源代码。
那么有什么办法可以解决这个问题吗?
(我知道解释器会在运行时将函数包装在装饰器内,但我可能是错的)
一般情况下没有简单的解决方案。
装饰器是一个给定函数返回一个函数的函数,通常通过将其“包装”在一个闭包中来执行装饰器设计的操作。
然而,文件和行号信息并不在函数对象本身中,您无法通过将此信息从包装函数复制到包装器来“修复”它们。该数据包含在code
函数的对象(可用于.func_code
),并且它在您要创建的所有闭包之间共享。
>>> def bar(x):
... def foo():
... return x
... return foo
...
>>> f1 = bar(1)
>>> f2 = bar(2)
>>> f1()
1
>>> f2()
2
>>> f1.func_code is f2.func_code
True
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)