获取函数的源文件行号

Chr*_*ris 2 python reflection inspect

有没有办法对任何随机函数实现这一点?

class Class:
    def function(self):
        pass

import inspect
print(inspect.getlineno(Class.function))
Run Code Online (Sandbox Code Playgroud)

这只是给出:

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'
Run Code Online (Sandbox Code Playgroud)

Dee*_*ace 5

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

你应该使用inspect.getsourcelines

import inspect

class Class:
    def function(self):
        pass

print(inspect.getsourcelines(Class.function))
Run Code Online (Sandbox Code Playgroud)

输出

(['        def function(self):\n', '            pass\n'], 4)
Run Code Online (Sandbox Code Playgroud)

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

print(inspect.getsourcelines(Class.function)[1])
# 4
Run Code Online (Sandbox Code Playgroud)