You need to enable JavaScript to run this app. Python装饰器场景下hi函数用print报错为何必须使用return语句
优惠活动
大模型
产品
解决方案
定价
更多

Python装饰器场景下hi函数用print报错为何必须使用return语句

错误原因说明

这个报错和装饰器的逻辑、print()的返回值特性直接相关,核心逻辑如下:

  • Python中print()的作用是将内容输出到控制台,它本身的返回值固定为None,你可以执行res = print('测试')后打印res验证这点。
  • 你定义的smart装饰器内部逻辑是:调用被装饰的原函数后,直接对原函数的返回值调用upper()方法,而upper()是只有字符串类型才具备的方法。
  • 当hi()函数用print('Hello World')实现时,hi()执行完成后的返回值就是print()返回的None,装饰器拿到None后调用upper()就会触发你遇到的AttributeError错误。
  • 把print改为return 'Hello World'后,hi()的返回值是字符串类型,自然可以正常调用upper()方法。

如果确实需要在hi()里用print,可以修改装饰器增加类型判断,避免调用不存在的方法:

def smart(func):
    def inner():
        func_res = func()
        # 仅当返回值为字符串时调用upper方法
        if isinstance(func_res, str):
            return func_res.upper()
        return func_res
    return inner

@smart
def hi():
    print('Hello World')

hi()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:39:03