【问题标题】:Flask session variable not allowing assignmentFlask 会话变量不允许赋值
【发布时间】:2016-11-14 14:36:32
【问题描述】:

在过去的一个月里,我一直在构建一个 Web 应用程序,而且事情进展得非常顺利,因为我对这一切是多么陌生。也就是说,直到昨天,当我对页面进行 AJAX 大修时,为用户提供服务器端进程的实时反馈。现在,当我启动应用程序时,我在第一行代码中收到错误(到目前为止没有产生任何问题),我在其中检查会话对象以查看操作是否处于活动状态。

我收到错误:

UnboundLocalError: local variable 'session' referenced before assignment

当我尝试代码时:

if 'active_op' not in session:
    print 'bizbaz'

如果之前没有无缝运行,我会认为我对这段代码做错了。我已将我的代码恢复为 AJAX 更新之前的代码,但我仍然收到此错误,即使它昨天使用相同的代码工作。对此的任何指示将不胜感激。正如我所说,尤其是对于 Web 应用程序开发和会话,我还是个新手。显然,我对会话和烧瓶对它们的使用的理解有点偏离,因为我完全不知道为什么这突然停止工作。如果有什么我可以做的来澄清我的问题,请告诉我;我被困住了,直到我弄清楚了。谢谢!

编辑: 我有这段代码试图将字典分配给会话变量。

session = {'foo':'bar'}

【问题讨论】:

  • 您将需要显示更多代码。例如,如果 session 是一个模块级变量,但您在函数中的任何位置分配给它,如果您在分配之前尝试读取它,则会收到此错误。
  • 谢谢@DanielRoseman。这就是问题所在。我进行了搜索和替换以清理我的一些代码,但我错过了将会话分配给字典的位置。
  • 我编辑了您的问题以包含有关“分配给 dict 的会话”的信息。我还将编辑 Sergey 的答案以提及这应该完成答案

标签: python session web flask


【解决方案1】:

确保在使用之前导入会话

from flask import session

编辑

主要问题是您将字典分配给您不应该执行的“会话”变量。

# Incorrect
session = {'foo':'bar'}

应该是

session['foo'] = 'bar'

【讨论】:

  • 我做到了。我现在正在修复;我之前错过了一些东西,如果它解决了这个问题,我会告诉你的。
  • 不走运。真的不确定是什么原因造成的。我从几天前提取了一些代码,正如预期的那样,它在同一个地方与会话一起工作。
  • 我假设会话一旦导入就存在是正确的,对吧?在运行这样的检查之前,我不需要初始化它或任何东西?真的让我很吃惊,它以前可以工作,我似乎找不到任何明显的区别使它表现得像一个“局部变量”。
  • 现在是 666 LOC;也许这就是问题所在:p
  • 可能不需要:如果我在稍后的代码中无意中为“会话”分配了一个值,python 会像它那样标记它吗?作为此 AJAX 更新的一部分,有一些非常随意的搜索和替换,我想我错过了一个关键值从会话中删除的地方,它被分配为: session = {'foo': 'bar'}
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2021-12-04
相关资源
最近更新 更多