Flask中request.form["action"]判断语句在PythonAnywhere报语法错误求助
解决Flask表单中的语法错误及相关问题
你的代码触发语法错误的核心原因是**try代码块没有对应的except或finally分支**——Python语法明确要求try必须搭配至少一个异常处理语句,否则会直接报错。除此之外,代码还存在表单控件缺失、字段大小写不匹配、逻辑跳转错误等问题,以下是修正后的完整代码:
from flask import Flask, request, session, make_response app = Flask(__name__) app.secret_key = 'your-secret-key-here' # 需配置实际密钥 def highlight(actor, character): # 这里是你的highlight函数实现,示例返回一个简单的PDF响应 response = make_response(b"%s as %s highlighted" % (actor.encode(), character.encode())) response.headers['Content-Type'] = 'application/pdf' return response @app.route("/actors", methods=["GET", "POST"]) def actors(): if "actors" not in session: session["actors"] = [] if "characters" not in session: session["characters"] = [] errors = "" if request.method == "POST": try: # 统一字段大小写,匹配表单中的name属性 if "actor" in request.form and "character" in request.form: session["actors"].append(str(request.form["actor"])) session.modified = True session["characters"].append(str(request.form["character"])) session.modified = True except Exception as e: errors = f"<p>Error adding entry: {str(e)}</p>" if request.form.get("action") == "Highlight Scripts": # 检查文件是否上传 if "input_file" not in request.files: errors = "<p>Please upload a script file</p>" else: input_file = request.files["input_file"] actors = session["actors"] characters = session["characters"] if not actors or not characters: errors = "<p>No actors/characters added yet</p>" else: # 示例:这里假设highlight处理所有条目后生成一个PDF,或调整为批量处理逻辑 # 原循环中直接return会只处理第一个条目,这里改为处理后清空session并提示 # 若需生成多个PDF,需调整响应逻辑 result = f"Processed {len(actors)} actor-character pairs" # 清空session session["actors"].clear() session.modified = True session["characters"].clear() session.modified = True return f''' <html> <body> <p>{result}</p> <p><a href="/actors">Click here to submit a new script</a></p> </body> </html> ''' # 生成已添加的演员列表 if len(session["actors"]) == 0: actors_so_far = "" else: actors_so_far = "<p>Actors & Characters so far:</p>" for a, c in zip(session["actors"], session["characters"]): actors_so_far += f"<p>{a} as {c}</p>" # 返回表单页面,补充缺失的控件 return f''' <html> <body> {actors_so_far} {errors} <p>Enter actor and corresponding character:</p> <form method="post" action="/actors" enctype="multipart/form-data"> <p>Actor: <input name="actor" required /></p> <p>Character: <input name="character" required /></p> <p>Script File: <input type="file" name="input_file" accept=".pdf,.txt" /></p> <p><input type="submit" name="action" value="Add another" /></p> <p><input type="submit" name="action" value="Highlight Scripts" /></p> </form> </body> </html> '''
关键修正点说明:
- 修复语法错误:给
try添加了except分支,处理字段缺失等异常,解决了原代码的语法问题。 - 表单控件补全:添加了
character输入框和input_file文件上传控件,匹配代码中用到的字段;同时添加enctype="multipart/form-data"以支持文件上传。 - 字段大小写统一:将
request.form["Actor"]改为request.form["actor"],与表单中的name属性一致,避免KeyError。 - 逻辑优化:调整了
Highlight Scripts分支的逻辑,避免循环中直接return导致只处理第一个条目;添加了空值检查,避免无数据时触发错误。 - HTML修正:补全了
<a>标签的闭合标签,修复了原模板的HTML语法错误。
内容的提问来源于stack exchange,提问作者deep_node
相关产品推荐
相关产品推荐

