2016-04-28 3 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)) 

Cet extrait fait partie d'un programme qui génère:NameError: nom n'est pas défini dans la fonction init python

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 

Pourquoi cela même si j'ai défini une valeur par défaut pour la variable?

Répondre

1

Vous mélangez des onglets et des espaces dans votre code; c'est votre code original collé dans la question:

enter image description here

Les lignes grises solides sont les onglets, les points sont des espaces.

Notez comment la boucle for est indentée à 8 espaces, mais est indentée par un onglet? Python étend les onglets pour huit espaces, pas quatre, donc à Python votre code ressemble à ceci:

source code at 8 spaces per tab

Maintenant, vous pouvez voir que la boucle for est en dehors la méthode __init__ et la noOfSensors variable de la signature de fonction __init__ n'y est pas définie.

Ne pas mélanger les onglets et les espaces en retrait, bâton à seulement onglets ou seulement espaces. Le guide de style PEP 8 Python strongly advises you to use only spaces for indentation. Votre éditeur peut facilement être configuré pour insérer des espaces chaque fois que vous utilisez la touche TAB, par exemple.

+0

Bonne explication, merci – Sahand

+0

De quel éditeur de texte avez-vous besoin? – Sahand

+0

@Sandi: Sublime Text 3, en utilisant le schéma de couleurs Monokay. –

-3

ce n'est pas instanciés Pourtant, si la valeur defalut exécutée lorsque la classe est créé l'homme