如何在__main__中创建一个变量,以供同一文件中定义的web.py类使用?

空值

我使用来自web.py的内置Web服务器,而不是像这个问题那样使用apache:Apache中web.py的全局变量用法

我有一个使用数字作为参数的Web服务,将其添加到内部变量中number并返回该变量。

脚本如下所示:

import web
import sys

urls = (
    '/(\d+)', 'Number'
)

class Number:
    def GET(self, parameter):
        # I want to read and write to the variable number here

        print "number in web service is " + str(number)

        number = number + int(parameter)
        return number


if __name__ == "__main__":
    #print sys.argv

    # I want to initialise the variable number here, based on command line parameter

    number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 # initialisation

    print "number init value " + str(number)

    app = web.application(urls, globals())
    app.run()

我像这样启动服务器:

sudo python test.py 192.168.0.100 16

16内部计数器的初始值在哪里

当这样执行时:

http://192.168.0.100:8080/42

UnboundLocalError: local variable 'number' referenced before assignment在这条线上

print "number in web service is " + str(number)

好的,所以我需要global,因为我不想number成为服务的局部变量,所以我更改为:

import web
import sys

urls = (
    '/(\d+)', 'Number'
)

class Number:
    def GET(self, parameter):
        # I want to read and write to the variable number here

        global number # number is not a lcoal variable

        print "number in web service is " + str(number)

        number = number + int(parameter)
        return number


if __name__ == "__main__":
    #print sys.argv

    # I want to initialise the variable number here, based on command line parameter

    number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 # initialisation

    print "number init value " + str(number)

    app = web.application(urls, globals())
    app.run()

现在,在同一行上调用服务时出现另一个错误NameError: global name 'number' is not defined为了解决这个问题,我在顶部添加了一个初始化:

import web
import sys

urls = (
    '/(\d+)', 'Number'
)

number = 0 # assigning value to define variable

class Number:
    def GET(self, parameter):
        # I want to read and write to the variable number here

        global number # number is not a lcoal variable

        print "number in web service is " + str(number)

        number = number + int(parameter)
        return number


if __name__ == "__main__":
    #print sys.argv

    # I want to initialise the variable number here, based on command line parameter

    number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 # initialisation

    print "number init value " + str(number)

    app = web.application(urls, globals())
    app.run()

虽然我现在没有收到错误,但逻辑已损坏。number init value is 16它说,当初始打印显示该值时,其他打印没有相同的值number in web service is 0

显然,number我的代码中有两个单独的变量。我发现这个答案指出这__main__是一个单独的模块。现在说明的不同值number但是,当我尝试添加global到时__main__,如下所示:

import web
import sys

urls = (
    '/(\d+)', 'Number'
)

number = 0 # assigning value to define variable

class Number:
    def GET(self, parameter):
        # I want to read and write to the variable number here

        global number # number is not a lcoal variable

        print "number in web service is " + str(number)

        number = number + int(parameter)
        return number


if __name__ == "__main__":
    #print sys.argv

    # I want to initialise the variable number here, based on command line parameter

    global number # I want that one global variable number
    number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 # initialisation

    print "number init value " + str(number)

    app = web.application(urls, globals())
    app.run()

该值在初始化时再次为16,在服务中再次为0。SyntaxWarning: name 'number' is assigned to before global declaration在那条新线上__main__

因此,我再次摆脱了顶部的任务,这实际上并没有必要。因为真正的初始化发生在__main__

import web
import sys

urls = (
    '/(\d+)', 'Number'
)

class Number:
    def GET(self, parameter):
        # I want to read and write to the variable number here

        global number # number is not a lcoal variable

        print "number in web service is " + str(number)

        number = number + int(parameter)
        return number


if __name__ == "__main__":
    #print sys.argv

    # I want to initialise the variable number here, based on command line parameter

    global number # I want that one global variable number
    number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 # initialisation

    print "number init value " + str(number)

    app = web.application(urls, globals())
    app.run()

虽然最初执行时没有警告,但确实NameError global name 'number' is not definedGET方法中获得了a

如何创建一个可以设置的变量,__main__并且还可以从同一文件中定义的类的方法读取和写入该变量

约夫·格拉兹纳(Yoav Glazner)

问题是因为自动重新加载的只是把它放在文件的顶部,一切都应该工作

import web
import sys



number = int(sys.argv[2]) if len(sys.argv) >= 3 else 0 #initialisation

urls = (
'/(\d+)', 'Number'
)

 ... #the rest of the file

您会看到,重新加载器将执行“ reload(yourmodule)”,因此不会再次调用__main__部分:(

干杯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-如何在同一文件中包含2个类?

如何在同一文件夹中重新加载().py文件?

如何在Angular 2中使用同一文件中的组件?

从另一个文件中的同一文件中注入可注入类

在Raku中,无法从同一文件中定义的类继承方法特性

使用javascript重定向到同一文件夹中的另一个页面

为什么Java允许导入在同一文件中定义的类?

如何在同一个Activity中调用将在同一文件上但在不同时间使用的两个方法?

如何使用python复制一个文件中的行并将其写入另一文件中?

XML-如何定义和使用要在同一文件中多个位置引用的节点

如何创建Ajax请求以使用DataTable和Codeigniter并在同一文件中返回

如何导出类并在同一文件中具有接口?

如何使用pytest运行与生产代码位于同一文件中的测试?

如何使用ArduinoJson从同一文件中检索多个NDJSON对象?

如何使用htaccess避免php中同一文件的多个路径?

Laravel,如何使用另一个控制器到同一文件夹

一个bash脚本,用于连接字符串并使用bash脚本在同一文件中编辑一行

是否可以在同一文件中的同一名称空间下使用多个类

在一个函数中使用名称空间中的符号,但在同一文件中不使用其他符号

如何使用PDFBox的创建一个链接,我可以点击进入另一个页面同一文档中

使用ARM跨工具链进入同一文件中定义的功能时出现分段错误

在不同的动作脚本文件(在同一文件夹中)中使用ActionScript类

PyQT 从同一文件中的其他类(Qthread)访问 UI 元素

为什么这些类仅在同一文件中才编译?

Scala导入类在同一文件夹中

访问同一文件中类的私有成员的函数

Javascript“导出默认值”到同一文件中的类

Scala特征和类在同一文件中

如何使用Gulp解压缩同一文件夹中的多个文件