You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:27:53