首页 > 解决方案 > 获取函数的源文件行号

问题描述

有没有办法为任何随机函数完成这个?

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'

标签: pythonreflectioninspect

解决方案


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

推荐阅读