【问题标题】:SyntaxError: Name 's' is used prior to global declaration in Python/Flask code [duplicate]SyntaxError:名称's'在Python / Flask代码中的全局声明之前使用[重复]
【发布时间】:2020-06-02 16:12:38
【问题描述】:

我的代码的目标是将其放入两个 EC2 实例中,然后将其连接到负载均衡器以在两个实例之间分配请求。

这是我的代码,我首先尝试在本地测试,然后在 EC2 实例中进行测试,然后最终使用负载均衡器测试所有内容。

from flask import Flask,request,session
##global s
s = 0
app = Flask(__name__)

@app.route("/", methods=["GET","POST"])
def disp():
    if request.method == "GET":
        global s
        s = 0 
        return str(s)
    if request.method == "POST":
        global s
        s = request.json["num"]
        return str(s)

if __name__ =="__main__":
    app.run()
    ##app.run('0.0.0.0', port=80)

我在本地运行时返回的错误是 SyntaxError: Name 's' is used before global declaration。我尝试在导入行之后删除 s=0 但错误仍然存​​在。

【问题讨论】:

  • 你不应该在第 2 行从头开始使 s 全局化吗?
  • @JakobF 全局范围已经意味着变量是全局的。您引用的注释行根本不需要。 global s 表示要覆盖全局变量的内容。
  • 我不确定您要在这里实现什么,但可能值得注意的是s 只是全局每个进程。通常,您在每台服务器上运行具有多个进程的应用程序,因此即使只有一个 EC2 实例,您也会收到不同/不可预测的 s 值。

标签: python python-3.x amazon-web-services flask amazon-ec2


【解决方案1】:

您的disp 函数中有两个global s,第二个说有问题,因为它之前看到了s = 0

理想情况下,在声明函数之后放置global 定义:

from flask import Flask,request,session

s = 0
app = Flask(__name__)

@app.route("/", methods=["GET","POST"])
def disp():
    global s
    if request.method == "GET":
        s = 0 
        return str(s)
    elif request.method == "POST":
        s = request.json["num"]
        return str(s)

if __name__ =="__main__":
    app.run()
    ##app.run('0.0.0.0', port=80)

也将第二个 if 改为 elif。

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 2011-01-07
    • 1970-01-01
    • 2019-04-18
    • 2016-04-23
    • 2023-01-07
    • 2017-05-16
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多