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

Python Flask登录代码提交未注册账号报NoneType无len()错误

报错根因

当提交的邮箱未录入数据库时,curl.fetchone() 执行后没有匹配的查询结果,会返回None而非空集合。原代码直接对可能为None的user变量调用len()方法,就会触发该类型错误。

修复方法

将原有长度判断逻辑替换为非空判断即可,修改后的代码片段如下:

def login():
    if request.method == 'POST':
        email = request.form['email']
        password = request.form['password'].encode('utf-8')
 
        curl = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        curl.execute("SELECT * FROM users WHERE email=%s",(email,))
        user = curl.fetchone()
        curl.close()
 
        # 替换原有len(user) > 0的判断逻辑
        if user:
            if bcrypt.hashpw(password, user["password"].encode('utf-8')) == user["password"].encode('utf-8'):
                session['name'] = user['name']
                session['email'] = user['email']
                return redirect(url_for('home'))
            else:
                flash ("Error password and email not match")
                return redirect(url_for('login'))
        else:
            flash("Error user not found")
            return redirect(url_for('login'))
    else:
        return render_template("login.html")
额外优化建议
  • 可以使用with上下文管理器操作游标,避免忘记手动关闭游标造成的资源泄漏
  • 密码校验可以直接使用bcrypt.checkpw(password, user["password"].encode('utf-8'))方法,代码可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:57:00