出现AttributeError: 'str'对象无__name__属性,该如何修复?
错误原因及修复方法
错误原因
你的装饰器make_bold最后返回的是wrapper(),这会立即执行wrapper函数,返回的是一个字符串(<b>Hello, World!</b>)。而Flask的路由装饰器@app.route("/")需要接收一个函数对象,当它尝试访问这个字符串的__name__属性时,就会抛出AttributeError: 'str' object has no attribute '__name__'错误。
修复方法
将装饰器中return wrapper()改为return wrapper,返回wrapper函数对象,而不是执行后的结果。这样装饰器才能正确包装目标函数,在请求触发时才执行包装后的逻辑。
修改后的完整代码
app = Flask(__name__) def make_bold(function): def wrapper(): return '<b>' + function() + '</b>' return wrapper # 直接返回函数对象,不再调用 @app.route("/") @make_bold def hello_world(): return 'Hello, World!' app.run(debug=True)
内容的提问来源于stack exchange,提问作者Prince Kumar
相关产品推荐
相关产品推荐

