获取函数的源文件行号

Get the source file line number of a function

有没有办法为任何随机函数完成此操作?

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'

您可以使用 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

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

您应该改用 inspect.getsourcelines

import inspect

class Class:
    def function(self):
        pass

print(inspect.getsourcelines(Class.function))

产出

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

它returns一个包含实际源代码和定义行号的二元组。

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

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

class Class:
    def function(self):
        pass

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

Class.function.__code__.co_firstlineno 表达式应该比 运行 inspect.getsourcelines(Class.function) 工作得更快,并且还会给你一个行号。