Python中如何在函数内获取未求值的原始输入表达式内容
实现方案
核心思路是通过inspect模块获取函数调用位置的源代码,从中提取传入的未求值表达式文本,无需改动函数调用方式,仅修改hello函数即可。
完整实现代码
import inspect import re def hello(*_): # 获取调用栈的上一帧,即调用hello的位置 stack = inspect.stack() try: # 读取调用行的原始代码 call_code = stack[1].code_context[0].strip() # 正则匹配hello(...)括号内的所有内容 match = re.search(r'hello\((.*)\)', call_code) if match: # 去除首尾空白后返回 return match.group(1).strip() return "" finally: # 手动删除栈帧引用避免内存泄漏 del stack
效果验证
# 测试用例(a、b变量是否定义不影响返回结果,因为我们直接取的原始代码文本) print(hello(a == 1)) # 输出: a == 1 print(hello(b == 1)) # 输出: b == 1 print(hello(a == 2)) # 输出: a == 2
注意事项
- 如果同一行有多个
hello调用,或者调用跨越多行,需要调整正则匹配逻辑适配场景 - 该实现依赖源代码可读取,在交互式环境、打包后的无源码环境下无法正常工作
内容的提问来源于stack exchange,提问作者김도훈
相关产品推荐
相关产品推荐

