2016-11-05 7 views
0

also hier ist ein Code, den ich habe, soll Text vom Benutzer eingegeben nehmen und ein Wörterbuch erstellen. Kann mir jemand sagen, warum ich einen Trace-Back-Fehler bekomme, wenn ich die Funktion main() aufruft?Warum erhalte ich einen Fehler beim Aufruf von main()?

def build_index(text): 
    index = {} 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    text = input("enter text") 
    build_index(text) 
    displayindex(index) 
main() 
+5

Können Sie den Traceback-Fehler buchen? –

+2

Btw, Sie ordnen die Rückgabewerte von 'text.join (x)' und 'text.replace (x, '')' nicht zu. Sie ändern die Zeichenkette, von der sie aufgerufen wurden, nicht. Sie geben nur eine neue Zeichenkette mit der von Ihnen gewünschten Änderung zurück. –

+0

Bitte bearbeiten Sie Ihre Frage so, dass sie die Rückverfolgung _complete_ enthält. Das würde Ihre Frage für andere nützlich machen, die das gleiche Problem haben. Es würde auch helfen, wenn Sie Ihren Titel so bearbeiten, dass er den Namen der ausgelösten Ausnahme enthält (wie NameError) ..., um anderen zu helfen, diese Frage zu finden. –

Antwort

0

Der Inhalt Zurückverfolgungsfehler hängt davon ab, welche Version von Python sind Sie Ihren Code in läuft in Python 3.x, die Zurückverfolgungs erklärt, warum es den Fehler produziert.

Traceback (most recent call last):
File "./prog.py", line 37, in
File "./prog.py", line 36, in main
NameError: name 'index' is not defined

TLDR: Sie müssen nur 3 Zeilen Code hinzufügen/ändern. Siehe Kommentare im Code unten

Der Nameerror sagt uns, dass es nicht weiß, was der Name index bezieht sich auf, weil sie aus dem Rahmen der main Methode ist und noch nicht definiert bekommen hat. Sie könnte schafft die global Instanz der index Variable wie in MeterLongCat Antwort erwähnt, aber da Index tut erstellt erhalten und definiert, wenn wir build_index nennen, können wir nur index nach dieser Methode zurückrufen, dessen Rückgabewert speichern, dann passieren es zu der displayindex Funktion, wie folgt.

OTOH, in Python 2, wie MeterLongCat darauf hinweist, möchten Sie eine Zeichenfolge vom Benutzer erhalten, die nicht input ist für, möchten Sie raw_input.

def build_index(text): 
    index = {} 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 
    return index     # Return the index 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    text = raw_input("enter text") # Use raw_input 
    index = build_index(text)  # Assign the index 
    displayindex(index) 
main() 
0

konnte ich der Traceback-Fehler loszuwerden, indem input zu raw_input (für Python 2.7) ändern. Sie haben jedoch andere Fehler, zum Beispiel index in Methode main ist nicht definiert. Die folgenden Werke:

index = {} 

def build_index(text): 
    global index 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    global index 
    text = raw_input("enter text") 
    build_index(text) 
    displayindex(index) 
main() 
+0

Ich benutze eine 3. (?) Version von Python, sorry habe ich nicht angegeben. –

Verwandte Themen