繁体   English   中英

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

[英]NameError: name is not defined in python init function

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))

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

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

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

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

在此处输入图片说明

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

请注意for循环如何缩进8个空格,而def __init__由一个制表符缩进? Python将制表符扩展到八个空格,而不是四个空格,因此对于Python,您的代码看起来像这样:

每个标签8个空格的源代码

现在,您可以看到for循环位于 __init__方法之外 ,并且尚未在其中定义__init__函数签名的noOfSensors变量。

不要在缩进混合制表符和空格,坚持公正标签或只是空格。 PEP 8 Python样式指南强烈建议您仅使用空格进行缩进 例如,只要使用TAB键,就可以轻松地将编辑器配置为插入空格。

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

即使我为变量分配了默认值,但它仍然卡住并给我错误:

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)

我发现的解决方案是:

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

class Andy(People):
    def play(self):
        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)
andy.play()

也许您的问题还有其他解决方案,但是我在编程方面还很陌生,您的代码中有些东西我不理解。 但是关于错误,我认为由于“自我”而产生的错误必须是您设置的实例才能在类中运行。 如果我弄错了概念,请纠正我。

它尚未被实例化,因此当class为Created man时执行的默认值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM