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

Python Flask代码执行if(name != session['name'])时报KeyError: 'name'如何解决

错误原因
  • 触发KeyError: 'name'是因为当前请求的session中没有存储name键,说明发起POST请求的用户未完成登录,session中没有写入对应的用户身份信息
  • 额外风险:现有代码仅在GET分支用了通用异常捕获,POST分支无任何异常处理,即使session正常,若请求路径中的name不存在于followers字典的键中,也会触发新的KeyError
修复方案

首先在所有需要读取session["name"]的逻辑前添加登录状态校验,同时给POST分支补充异常捕获、优化文件操作逻辑,修复后代码如下:

import json
from flask import session, request, render_template, redirect

# 你的原有视图函数逻辑
def user_page(name):
    if request.method == "GET":
        try:
            return render_template("user.html", name=name, bio=accounts[name]["bio"], follower=len(followers[name]))
        except:
            return 'incorrect username, <a href=/users>go back</a>.'
    else:
        # 新增登录校验
        if "name" not in session:
            return redirect('/login') # 替换为你的实际登录页地址
        # 新增用户名校验,避免followers中无对应键
        if name not in followers:
            return 'incorrect username, <a href=/users>go back</a>.'
        print(name)
        if name != session["name"]:
            if session["name"] not in followers[name]:
                followers[name].append(session["name"])
            else:
                followers[name].remove(session["name"])
        # 用with上下文管理器优化文件写入,避免资源泄漏
        with open("database_followers.json", "w") as f:
            f.write(json.dumps(followers))
        return redirect(f'/users/{name}')

内容的提问来源于stack exchange,提问作者Hexagon96

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:09:03