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

Python3:如何通过变量拼接字符串调用函数?解决TypeError报错

解决字符串转函数调用的问题

你的错误原因很明确:function_call是拼接出来的字符串,而不是实际的函数对象,字符串类型不能被当作函数调用,所以抛出TypeError: 'str' object is not callable。

要实现你想要的“通过字符串找到对应函数并调用”的逻辑,可以借助Python的命名空间字典来实现,具体有两种常用方式:

方法一:使用全局命名空间字典globals()

如果你的get_list1、get_list2、get_list3是全局函数,可以通过globals()获取全局作用域中的函数对象:

def get_list1():
    print("执行get_list1")
def get_list2():
    print("执行get_list2")
def get_list3():
    print("执行get_list3")

data = ['list1', 'list2', 'list3']

for list_item in data:
    function_name = 'get_' + list_item
    # 从全局命名空间中取出对应函数
    target_func = globals().get(function_name)
    # 先判断函数是否存在且可调用,避免报错
    if target_func and callable(target_func):
        target_func()
    else:
        print(f"不存在可调用的函数: {function_name}")

globals()返回一个包含当前全局所有变量、函数的字典,键是名称字符串,值是对应的对象,所以可以通过拼接好的函数名字符串作为键,取出真正的函数对象,之后就能正常调用了。

方法二:使用局部命名空间字典locals()

如果你的函数是定义在某个局部作用域内(比如另一个函数内部),就用locals()代替globals(),用法完全一致:

def main():
    def get_list1():
        print("执行get_list1")
    def get_list2():
        print("执行get_list2")
    def get_list3():
        print("执行get_list3")

    data = ['list1', 'list2', 'list3']
    for list_item in data:
        function_name = 'get_' + list_item
        target_func = locals().get(function_name)
        if target_func and callable(target_func):
            target_func()

main()

额外提示

虽然这种字符串转函数的方式能实现需求,但实际开发中更推荐用字典映射的方式(你提到的其他思路),代码可读性和安全性更高:

def get_list1():
    print("执行get_list1")
def get_list2():
    print("执行get_list2")
def get_list3():
    print("执行get_list3")

func_map = {
    'list1': get_list1,
    'list2': get_list2,
    'list3': get_list3
}

data = ['list1', 'list2', 'list3']
for list_item in data:
    func = func_map.get(list_item)
    if func:
        func()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:10:28