运行Flask项目报'str'对象无'route'属性错误,如何解决?
错误原因
- 你在实例化Flask应用对象时语法错误,现有代码
app = (__name__)直接将字符串__name__赋值给了app变量,而没有调用Flask类初始化,导致app是字符串类型,自然没有route属性。 - 代码还有一处隐藏错误:请求名言接口时误用了Flask的
request对象调用get方法,实际应该用你导入的requests库发送HTTP请求。
修正后的完整代码
from flask import Flask, request import requests from twilio.twiml.messaging_response import MessagingResponse # 修正:调用Flask类初始化应用对象 app = Flask(__name__) @app.route('/mybot',methods=['POST']) def mybot(): incoming_message = request.values.get('Body','').lower() resp = MessagingResponse() msg = resp.message() responded = False if 'hi' in incoming_message: msg.body('Hello, iam luja') responded = True if 'quotes' in incoming_message: # 修正:用requests库发送get请求,而非Flask的request对象 r = requests.get('https://api.quotable.io/random') if r.status_code == 200: data = r.json() quote = f'{data["content"]}({data["author"]})' else: quote = 'not able to retrieve' msg.body(quote) responded = True if 'who are you' in incoming_message: msg.body('Hi i am Bot') responded = True if not responded: msg.body('not able to return the msg') return str(resp) if __name__ == '__main__': app.run()
修改说明
- 将
app = (__name__)替换为app = Flask(__name__),完成Flask应用对象的初始化,此时app才具备route等Flask应用内置的属性和方法。 - 将
r = request.get('https://api.quotable.io/random')替换为r = requests.get('https://api.quotable.io/random'),正确调用第三方请求库发送网络请求,避免后续运行到请求名言逻辑时报错。
修改完成后重新运行代码即可正常启动服务。
内容的提问来源于stack exchange,提问作者lewis machilika
相关产品推荐
相关产品推荐

