2016-04-28 5 views
1
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)) 

Dieser Auszug Teil eines Programms ist, das erzeugt:Nameerror: Name definiert ist, nicht in Python init Funktion

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 

Warum dies auch geschieht, obwohl ich einen Standardwert für die Variable definiert haben?

Antwort

1

Sie Tabs und Leerzeichen im Code mischen; dies ist Ihre Original-Code wie in die Frage eingefügt:

enter image description here

Die festen grauen Linien sind Registerkarten sind die Punkte Plätze.

Beachten Sie, wie die for Schleife auf 8 Leerzeichen eingerückt ist, aber wird um eine Registerkarte eingerückt? Python erweitert Tabs acht Räume, nicht vier, so zu Python Code sieht wie folgt aus statt:

source code at 8 spaces per tab

Jetzt können Sie sehen, dass die for Schleife außerhalb das Verfahren __init__ ist, und die noOfSensors Variable aus der __init__ Funktionssignatur ist dort nicht definiert.

nicht Tabs und Leerzeichen in Vertiefung mischen, halten Sie sich an nur Tabs oder nur Plätze. Der PEP 8 Python Style Guide strongly advises you to use only spaces for indentation. Ihr Editor kann einfach so konfiguriert werden, dass Leerzeichen eingefügt werden, wenn Sie beispielsweise den Schlüssel TAB verwenden.

+0

Große Erklärung, thx – Sahand

+0

Aus welchem ​​Text-Editor stammen Ihre Ausschnitte? – Sahand

+0

@Sandi: Sublime Text 3, mit dem Monokay-Farbschema. –

-3

es ist nicht instanziert Doch so der defalut Wert ausgeführt wird, wenn Klasse Mann Erstellt wird