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

Python装饰器调用报错:TypeError: 'str' object is not callable 求解

错误原因解析

当你用@wrapThis修饰msgReturnAsList时,Python会自动把msgReturnAsList这个函数对象作为参数传给wrapThis,然后将wrapThis的返回值重新赋值给msgReturnAsList。

你的wrapThis函数直接把传入的函数对象转成了大写字符串并返回,这就导致msgReturnAsList不再是可调用的函数,而是一个字符串。当你执行msgReturnAsList(b)时,本质是尝试调用一个字符串,自然会抛出TypeError: 'str' object is not callable。

修正方案及代码

要实现“先转大写再转列表返回”的需求,装饰器必须遵循正确的嵌套结构——接收原函数为参数,返回一个包装函数来处理逻辑:

def wrapThis(func):
    def wrapper(msg):
        # 第一步:将输入字符串转为大写
        upper_msg = msg.upper()
        # 第二步:调用原函数将大写字符串转为列表
        return func(upper_msg)
    return wrapper

@wrapThis
def msgReturnAsList(msg):
    return list(msg)

b = "Convert to upper and output it as a list of letters."
print(msgReturnAsList(b))
代码说明
  • wrapThis作为装饰器,接收原函数func(即msgReturnAsList)作为参数。
  • 内部的wrapper函数是实际执行逻辑的载体:先处理输入字符串转大写,再将处理后的字符串传给原函数,完成转列表的操作。
  • wrapThis最终返回wrapper函数,此时msgReturnAsList被替换为wrapper,调用时会按顺序执行大写转换和列表转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:40:26