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

Python如何通过字符串名称动态调用模块内的对应函数?

错误原因

你的代码报错核心是两处写法错误:

  • module.list[x]()的逻辑是尝试访问module模块下名为list的属性,但你定义的存储函数名的list是当前文件的局部变量,不属于module模块的成员,自然触发"module has no attribute list"错误。
  • 列表本身仅支持整数下标索引,你循环中拿到的元素是字符串类型的函数名,就算直接写list[x]也会触发类型错误。
  • 额外提醒:不要用list作为自定义变量名,它是Python内置列表类型的保留字,会覆盖内置能力埋下隐患。
正确实现方案

通过字符串名称获取对象(模块也是一种对象)的成员,直接用Python内置的getattr()函数即可,该函数接收对象、成员名字符串两个核心参数,返回对应的成员对象。
修正后的调用代码:

import module # 包含x()、y()、z()三个函数的自定义模块

func_name_list = ['x','y','z']
for func_name in func_name_list:
    current_func = getattr(module, func_name)
    current_func()

运行后会依次执行三个函数,输出x、y、z。

鲁棒性增强写法

如果存在函数名不在模块内的可能,可以给getattr传入第三个默认值参数,搭配callable()校验避免程序崩溃:

import module

func_name_list = ['x','y','z', 'test_non_exist']
for func_name in func_name_list:
    current_func = getattr(module, func_name, None)
    if callable(current_func):
        current_func()
    else:
        print(f"模块中不存在名为{func_name}的可调用函数")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:12:46