Flask开发报错AttributeError: 'NoneType' object has no attribute 'email'求助
错误根因
错误触发在NewWeb.py第75行,执行users.query.filter_by(name=user).first()查询用户时,没有匹配到对应记录,found_user被赋值为None,直接对None访问email属性就抛出了这个异常。
常见触发场景
- 登录后手动删除了数据库内对应用户的记录,session中还保留登录态,提交邮箱更新时查询不到用户
- session存储的用户名被篡改,和数据库内存储的用户名无法匹配
- 用户名输入时带前后空格,登录和查询时的处理逻辑不一致导致匹配失败
修复方案
在修改邮箱前新增非空判断,对用户不存在的异常场景做兜底处理,修改后的/user路由代码如下:
@app.route("/user", methods=["POST", "GET"]) def user(): email = None if "user" in session: user = session["user"] if request.method == "POST": email = request.form["email"] session["email"] = email found_user = users.query.filter_by(name=user).first() # 新增非空判断和异常兜底 if found_user: found_user.email = email db.session.commit() flash("Email Salvestatud!") else: flash("当前登录用户不存在,请重新登录") session.pop("user", None) session.pop("email", None) return redirect(url_for("login")) else: if "email" in session: email = session["email"] return render_template("user.html", email=email) else: flash("Sa ei ole sisse loginud!") return redirect(url_for("login"))
临时排查方法
本地测试时可以直接删除项目根目录下的users.sqlite3文件,重启服务后会自动重建数据库,重新注册登录即可验证正常流程。
内容的提问来源于stack exchange,提问作者sew
相关产品推荐
相关产品推荐

