NameError:python init函数中未定义名称

NameError:python init函数中未定义名称,python,init,nameerror,Python,Init,Nameerror,此摘录是生成以下内容的程序的一部分: class HumidityServer(CoAP): def __init__(self, host, port, noOfSensors=10, multicast=False): CoAP.__init__(self, (host, port), multicast) for num in range(noOfSensors): self.add_resource('humidity'+

此摘录是生成以下内容的程序的一部分:

class HumidityServer(CoAP):
    def __init__(self, host, port, noOfSensors=10, multicast=False):
        CoAP.__init__(self, (host, port), multicast)

        for num in range(noOfSensors):
            self.add_resource('humidity'+num+'/', HumidityResource(num))

尽管我为变量定义了默认值,为什么会发生这种情况?

它还没有实例化,所以创建类时执行的defalut值还没有实例化,所以创建类时执行的defalut值在代码中混合了制表符和空格;这是粘贴到问题中的原始代码:

灰色实线是制表符,点是空格

请注意,for循环是如何缩进到8个空格的,而h def uu init uu是如何缩进到一个制表符的?Python将制表符扩展为八个空格,而不是四个,因此在Python中,您的代码如下所示:

现在您可以看到for循环在_init__方法之外,并且_init__函数签名中的noOfSensors变量没有在这里定义


不要在缩进中混合制表符和空格,只使用制表符或空格。PEP8 Python风格指南。例如,您可以轻松地将编辑器配置为在使用TAB键时插入空格。

您在代码中混合了制表符和空格;这是粘贴到问题中的原始代码:

灰色实线是制表符,点是空格

请注意,for循环是如何缩进到8个空格的,而h def uu init uu是如何缩进到一个制表符的?Python将制表符扩展为八个空格,而不是四个,因此在Python中,您的代码如下所示:

现在您可以看到for循环在_init__方法之外,并且_init__函数签名中的noOfSensors变量没有在这里定义


不要在缩进中混合制表符和空格,只使用制表符或空格。PEP8 Python风格指南。例如,只要使用TAB键,编辑器就可以轻松配置为插入空格。

我复制并运行了代码,这并不是因为@Martijn回答了混合选项卡和空格的问题。我在创建一个基于类的小游戏时遇到了类似的问题

尽管我已为变量指定了默认值,但它仍然存在,并给了我错误:

Traceback (most recent call last):
  File "humidityserver.py", line 10, in <module>
    class HumidityServer(CoAP):
  File "humidityserver.py", line 14, in HumidityServer
    for num in range(noOfSensors):
NameError: name 'noOfSensors' is not defined
我研究了一下,看到有人在谈论实例。然后我尝试创建一个实例,让实例执行该函数,同时定义一个我想要执行的函数。这就行了。下面是我的修复示例:

NameError: name 'mental' is not defined #where mental is the variable
我找到的解决办法是:

class People(object):
    def __init__(self, vital, mental):
    self.vital = vital
    self.mental = mental

class Andy(People):
        print "My name is Andy... I am not the killer! Trust me..."
        chat1 = raw_input(">")
        if chat1 == ('i believe you' or 'yes i believe' or 'believe' or 'i trust you' or 'yes i trust you'):
            self.mental += -1
            print "(checking) option 1"
        elif chat1 == ('you are killer' or 'you are the one' or 'really?' or 'i doubt' or 'i don\'t believe' or 'i don\'t trust you'):
            self.mental += 1
            print "(checking) option 2"
        else:
            print "Pass to else"
            print self.mental
            print self.vital

andy = Andy(1, 5)

也许你的问题还有其他解决方案,但我对编程很陌生,你的代码中有些东西我不懂。但是关于你得到的错误,我认为它是因为“self”必须是你设置的一个实例,它才能在类中运行。如果我的概念错了,请纠正我。

我复制并运行了代码,这不是因为@Martijn回答的混合制表符和空格问题。我在创建一个基于类的小游戏时遇到了类似的问题

尽管我已为变量指定了默认值,但它仍然存在,并给了我错误:

Traceback (most recent call last):
  File "humidityserver.py", line 10, in <module>
    class HumidityServer(CoAP):
  File "humidityserver.py", line 14, in HumidityServer
    for num in range(noOfSensors):
NameError: name 'noOfSensors' is not defined
我研究了一下,看到有人在谈论实例。然后我尝试创建一个实例,让实例执行该函数,同时定义一个我想要执行的函数。这就行了。下面是我的修复示例:

NameError: name 'mental' is not defined #where mental is the variable
我找到的解决办法是:

class People(object):
    def __init__(self, vital, mental):
    self.vital = vital
    self.mental = mental

class Andy(People):
        print "My name is Andy... I am not the killer! Trust me..."
        chat1 = raw_input(">")
        if chat1 == ('i believe you' or 'yes i believe' or 'believe' or 'i trust you' or 'yes i trust you'):
            self.mental += -1
            print "(checking) option 1"
        elif chat1 == ('you are killer' or 'you are the one' or 'really?' or 'i doubt' or 'i don\'t believe' or 'i don\'t trust you'):
            self.mental += 1
            print "(checking) option 2"
        else:
            print "Pass to else"
            print self.mental
            print self.vital

andy = Andy(1, 5)

也许你的问题还有其他解决方案,但我对编程很陌生,你的代码中有些东西我不懂。但是关于你得到的错误,我认为它是因为“self”必须是你设置的一个实例,它才能在类中运行。如果我的概念有误,请更正。

@Sandi:Sublime Text 3,使用Monokay配色方案。@Sandi:Sublime Text 3,使用Monokay配色方案。