Flask运行do_search方法缺失phrase、letters位置参数报错如何解决?
问题原因
- 核心报错根源:Flask 路由对应的视图函数仅在路由配置了路径参数时才需要声明对应入参,你的参数是从 POST 表单中读取,不需要把
phrase、letters写在do_search的函数入参列表中。Flask 调用该视图函数时不会自动传递这两个参数,因此触发参数缺失的 TypeError。 - 逻辑代码错误:你先将
set(letters)转为字符串再调用intersection方法,字符串类型没有该方法,修复参数问题后仍会触发报错。 - 模板拼写错误:HTML 模板中标题变量写为
the_tile,后端传递的变量名为the_title,少了一个字母t,会导致页面标题渲染为空。
修复方案
Python 代码修改
- 删除
do_search函数的两个入参声明 - 修正交集计算逻辑,先对两个入参转集合再取交集
- 确保已导入
request、render_template依赖
修正后的完整代码如下:
from flask import Flask, request, render_template app = Flask(__name__) @app.route('/') def flask_hello(): return 'Please go to: http://127.0.0.1:5000/entry' @app.route('/search4', methods=['POST']) def do_search() -> str: phrase = request.form['phrase'] letters = request.form['letters'] common_chars = set(letters).intersection(set(phrase)) return str(common_chars) @app.route ('/entry') def entry_page() -> 'html': return render_template('entry.html', the_title='Welcome to search4letters on the web!') if __name__ == '__main__': app.run(debug=True)
HTML 模板修改
将模板中标题的变量名修正为和后端传递的一致即可:
<h2> {{ the_title }}</h2>
内容的提问来源于stack exchange,提问作者Kingster3742
相关产品推荐
相关产品推荐

