python - 在Python中获取包含一行的函数

标签 python reflection

我希望做某种反射,给定行号和模块,我得到包含该行的模块中的函数名称。这在 Python 中可能吗?

最佳答案

Python 中没有内置方法可以执行此操作。但是,您可以定义一个函数来执行类似的操作,但它会将模块作为当前目录中的文件进行处理:

import re

def get_function_name(module, line):
    module_file = module.replace('.', '/') + '.py'
    lines = open(module_file, 'r').xreadlines()
    i = line - 1
    try:
        while i:
            tmp = next(lines)
            i -= 1
    except StopIteration:
        raise EOFError('Not enought lines in module %s' % module)
    function_line = next(lines)
    function_name =  re.match('def (\w+)\([^)]*\):', function_line)
    if function_name:
        return function_name.group(1)
    raise ValueError('No function declared on line %s' % line)

该函数打开作为文件传递的模块,迭代直到到达传递的行,然后使用正则表达式搜索函数的名称。如果传递的行上没有声明函数或者传递的行超出了文件的行数,则会引发错误。例如:

>>> get_function_name('my_module.my_submodule', 24)
'my_function_name'
>>> get_function_name('my_module.my_submodule', 25)
    Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 15, in get_function_name
ValueError: No function declared on line 17
>>> get_function_name('my_module.my_submodule', 123456)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in get_function_name
EOFError: Not enought lines in module

关于python - 在Python中获取包含一行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837223/

相关文章:

Python:使用 CSV 解析(?)变量,然后将其输出到另一个文件

c# - 允许或禁止方法在 .NET 中运行

go - 有人可以解释这个结果吗?

c# - 反射(reflection):如何获得不同的IEnumerable属性?

Java:是否可以在运行时向 Activity 对象实例添加/附加代理?

java - 在android中检测传入的视频通话

python - dateutil.parser : how to deal with dd/mm and mm/dd in same column?

python - 如何根据python中每行的前面数字将两个文件连接在一起

python - 如何将条形图值更改为百分比 (Matplotlib)

python - 文件的部分下载(仅更改了内容)