2017-05-25 3 views
-3

Ich habe eine Aufgabe zu tun, um herauszufinden, was der Code unten tut. es sieht so aus, als ob es in python2 erstellt wurde, aber ich möchte python3 verwenden. Ich habe argparse installiert, die es erfordert, und den notwendigen Dateipfad eingerichtet, aber jedes Mal, wenn ich das Programm in der Befehlszeile ausführe, bekomme ich diese Probleme.Python-Fehler NameError: Name 'Ofclass' ist nicht definiert

Traceback (most recent call last): 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 6, in <module> 
    class Noddy: 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 63, in Noddy 
    if __name__ == '__main__': main() 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 57, in main 
    ent = Noddy.make(fools) 
NameError: name 'Noddy' is not defined 

Der Code ist unten.

#! python3 


class Noddy: 
    def __init__(self, x): 
     self.ant = None 
     self.dec = None 
     self.holder = x 

    @classmethod 
    def make(self, l): 
     ent = Noddy(l.pop(0)) 
     for x in l: 
      ent.scrobble(x) 
     return ent 

    def scrobble(self, x): 
     if self.holder > x: 
      if self.ant is None: 
       self.ant = Noddy(x) 
      else: 
       self.ant.scrobble(x) 
     else: 
      if self.dec is None: 
       self.dec = Noddy(x) 
      else: 
       self.dec.scrobble(x) 

    def bubble(self): 
     if self.ant: 
      for x in self.ant.bubble(): 
       yield x 
      yield self.holder 
      if self.dec: 
       for x in self.dec.bubble(): 
        yield x 

    def bobble(self): 
     yield self.holder 
     if self.ant: 
      for x in self.ant.bobble(): 
       yield x 
     if self.dec: 
      for x in self.dec.bobble(): 
       yield x 

    def main(): 
     import argparse 
     ap = argparse.ArgumentParser() 
     ap.add_argument("foo") 
     args = ap.parse_args() 

     foo = open(args.foo) 
     fools = [int(bar) for bar in foo] 
     ent = Noddy.make(fools) 

     print(list(ent.bubble())) 
     print 
     print(list(ent.bobble())) 

    if __name__ == '__main__': main() 
+0

Haben Sie den gesamten Fehler aufgenommen? Ich sehe nur einen Stacktrace? – OptimusCrime

+0

Die Verwendung von @classmethod mit self macht einen Fehler. Verwenden Sie stattdessen cls. –

+0

Update mit vollem Fehler –

Antwort

0

Ihre def main() und if __name__=='__main__' haben innerhalb Klasse geschrieben. Der Interpreter versucht sie auszuführen, während er die Klasse definiert, und kann nicht, weil die Klasse Noddy nicht existiert, bis die Klassendefinition beendet ist.

Fix die Einrückung, so dass die main Zeug liegt außerhalb Ihre Klasse.

class Noddy: 
    def __init__(self, x): 
     self.ant = None 
     self.dec = None 
     self.holder = x 
    # other methods INSIDE the class 
    # ... 

# Notice the indentation — this function is OUTSIDE the class 
def main(): 
    # whatever main is supposed to do 
    # ... 

if __name__=='__main__': 
    main() 
Verwandte Themen