gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:04:29 24 4
gpt4 key购买 nike

我希望做某种反射,给定行号和模块,我得到包含该行的模块中的函数名称。这在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com