Python延迟代码求值:实现可打印源码、执行处理结果的测试函数
test()测试例程实现需求 我希望实现一个test()测试例程,向其传入代码后需要完成以下功能:
- 打印传入的代码内容
- 执行对应代码
- 对代码执行结果做后续处理
- 在后台自动完成参数处理
对于简短的代码片段,我可以使用eval(code-string)实现需求,示例代码如下:
def test_eval(expr_str, expected): global a,b res = eval(expr_str) == expected print(f'{res} : {expr_str}')
但该方案无法适配以下场景:
- 包含赋值操作的代码
- 要求
test()无需显式传参即可调用fun(),即使原函数为带参形式fun(a, b...) - 较长的代码块
现有可行方案
目前已实现一种可运行的方案:
import inspect def test(fun,expected,args): res = fun(*args) == expected expr = inspect.getsource(fun) print(f'{res} : {expr}') def tests(): def w(a,b): # args a += b # assignment return a.sym == "(a + b)" a = ... b = ... test(w,True,(a,b))
是否存在更优的实现思路?
内容的提问来源于stack exchange,提问作者sten
相关产品推荐
相关产品推荐

