2012-11-21 7 views
-2

Je travaille actuellement sur la programmation python.NameError: le nom 'self' n'est pas défini?

class A: 
    def LoadPosition(self): 
     FILE = open('a.txt', "r+") 

     i = 0 
     for node in self.nodes: 
      line = FILE.readline() 
      if i == 0: 
       scaling_factor == float(line) 
       i += 1 
      else: 
       tmpn, tmpx, tmpy, tmpa = line.split('\t') 
       node.id = tmpn 
       node.coordinate_x = float(tmpx) 
       node.coordinate_y = float(tmpy) 
       node.area = int(tmpa) 
     FILE.close() 

C'était bien avant, mais tout à coup, il montre le message NameError. Sil te plait aide moi.

Merci d'avance.

+2

Avez-vous la même indentation dans votre code d'origine? Il semble que ce soit le problème. Vous devez mettre tout le code de votre fonction en retrait de '4 espaces' vers la droite. –

+0

@RohitJain: il ne peut pas. Ce serait 'IndentationError: Unindent inattendu' – inspectorG4dget

+0

' Class' -> 'class' – arshajii

Répondre

6

Vous mélangez des espaces et des tabulations de manière étrange, ce qui est probablement source de confusion pour Python. Voici ce que je reçois quand je copier-coller votre code de la fenêtre d'édition:

In [2]: for line in s.splitlines(): 
    ...:  print repr(line) 
    ...:  
'' 
' class A:' 
' \tdef LoadPosition(self):' 
'\t  FILE = open(\'a.txt\', "r+")' 
' \t' 
'\t\t i = 0' 
' \t for node in self.nodes:' 
' \t \tline = FILE.readline()' 
' \t \tif i == 0:' 
' \t \t\tscaling_factor == float(line)' 
' \t \t\ti += 1' 
' \t \telse:' 
" \t \t\ttmpn, tmpx, tmpy, tmpa = line.split('\t')" 
'\t  \t  \tnode.id = tmpn' 
' \t\t   \tnode.coordinate_x = float(tmpx)' 
' \t\t   \tnode.coordinate_y = float(tmpy)' 
' \t\t  \t node.area = int(tmpa)' 
'\t\t FILE.close()' 

[Notez que si le code de quelqu'un copie de la question posée et non la fenêtre d'édition crue, cela pourrait ne pas se produire - à le moins parfois il est supprimé voir les onglets d'origine pour moi - et ainsi les gens qui essayent votre code pourraient ne pas avoir de problèmes.]

Étape # 1: exécutez votre code en utilisant python -tt yourfilenamehere.py pour confirmer qu'il s'agit d'une erreur d'onglet. Étape n ° 2: passez à l'utilisation des onglets à quatre espaces partout dans le monde.

+0

code original était bien, mais merci. –

+0

@SangChae: dites-vous que le code d'origine a survécu 'python -tt'? – DSM

+0

oh, mon mauvais. Votre commentaire était juste. C'était très utile! Je vous remercie. –