获取函数的源文件行号

时间:2019-11-14 14:39:02

标签: python reflection inspect

对于任何随机函数,有没有办法做到这一点?

class Class:
    def function(self):
        pass

import inspect
print(inspect.getlineno(Class.function))

这只是给出:

File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\inspect.py", line 1479, in getlineno
    return frame.f_lineno
AttributeError: 'function' object has no attribute 'f_lineno'

4 个答案:

答案 0 :(得分:2)

inspect.getlineno需要一个框架对象。

您应该改用inspect.getsourcelines

import inspect

class Class:
    def function(self):
        pass

print(inspect.getsourcelines(Class.function))

输出

(['        def function(self):\n', '            pass\n'], 4)

它返回一个包含实际源代码和定义行号的2元组。

print(inspect.getsourcelines(Class.function)[1])
# 4

答案 1 :(得分:0)

您可以使用getsourcelines()

class Class:
    def function(self):
        pass

import inspect
ins = inspect.getsourcelines(Class.function)
print('Source:',ins[0])
print('Line:',ins[1])

输出:

Source: ['    def function(self):\n', '        pass\n']
Line: 4

答案 2 :(得分:0)

以下将给出给定函数的源文件行号。

class Class:
    def function(self):
        pass

import inspect
function_definition = inspect.getsourcelines(Class.function)
for output in function_definition:
    print(output)

答案 3 :(得分:0)

Class.function.__code__.co_firstlineno表达式的运行速度应比运行inspect.getsourcelines(Class.function)更快,并且还会为您提供行号。

相关问题