SyntaxError:Name';s';在Python/Flask代码中,在全局声明之前使用

SyntaxError:Name';s';在Python/Flask代码中,在全局声明之前使用,python,python-3.x,amazon-web-services,flask,amazon-ec2,Python,Python 3.x,Amazon Web Services,Flask,Amazon Ec2,我的代码的目标是将其放在两个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

我的代码的目标是将其放在两个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:名称“s”在全局声明之前使用。我尝试在导入行之后删除s=0,但错误仍然存在。

您的
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。

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。

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