You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python exec调用带对象参数的函数时遇SyntaxError问题求助

解决动态调用测试函数时的SyntaxError问题

问题重现

尝试通过exec动态调用接收对象参数的函数,代码如下:

exec(f"{object.attr1}.{object.attr2}({interface_obj})")

运行时触发语法错误:

SyntaxError: invalid syntax

具体错误指向interface_obj位置,完整错误提示:

test1.test_func(<__main__.TEST object at 0x000002962BF83FD0>)
                 ^
SyntaxError: invalid syntax

背景

开发自动化测试平台,目录结构如下:

main.py
.\Main_dependency
      |__ test_calling_script.py
.\Test
      |__ test1.py
      |__ test2.py
      :
      |__ testN.py

需求是在test_calling_script.py中统一导入测试模块,根据输入动态执行对应测试函数,最初采用exec实现单行调用导致错误。

正确解决方案

放弃使用exec,改用importlib动态导入模块结合getattr获取函数的方式,完全规避字符串拼接带来的语法问题。

通用用法

from importlib import import_module
# 动态导入目标模块并获取函数
target_func = getattr(import_module('包名.测试文件名'), '函数名')
# 调用函数并传入参数
target_func(传入的参数)

适配当前场景的代码

from importlib import import_module
# 动态导入Test目录下的指定测试模块
test_module = import_module(f'Test.{object.attr1}')
# 从模块中获取要执行的测试函数
test_func = getattr(test_module, object.attr2)
# 执行函数并传入interface_obj参数
test_func(interface_obj)

注:原解决方案代码中getattr的第二个参数多了不必要的大括号,已修正为直接传入属性值。

类似场景说明

动态导入模块成员(类/函数)时,优先使用importlib+getattr的组合方案,相比exec更安全、更易维护,也能避免字符串解析带来的语法错误。

内容的提问来源于stack exchange,提问作者pedru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:47:19