2012-04-11 6 views
0

Ich arbeite an einem Infix-Präfix-Programm mit einer Stack-Klasse. Die Methode push() löst jedoch immer dann einen IndexError aus, wenn ich eine Ganzzahl aufrufe, obwohl ich einen Ausnahme-Handler habe und auf die Ganzzahl selbst, nicht auf eine Liste, referenziere.IndexError von Aufruf einer Integer

stack.py:

class stack(): 
    def __init__(self,n): 
     self.n = n 
     self.top = -1 
     self.stack = [""] * n 

    #... 

    def push(self,c): 
     try: 
      print(self.top) 
      self.top += 1 
      self.stack[self.top] = c 
     except IndexError: 
      print("Stack is full.") 

pip.py:

def toPrefix(input): 
    instack = stack(15) 
    prefix = "" 

    for i in range(0,len(input)): 
     for c in range(0,len(input[i])): 
      if(input[i][c].isalpha()): 
       instack.push(input[i][c]) 

Fehler:

Traceback (most recent call last): 
    File "<string>", line 247, in run_nodebug 
    File "P:\Scripts\Python\ascl-pip.py", line 42, in <module> 
    toPrefix(infix) 
    File "P:\Scripts\Python\ascl-pip.py", line 37, in toPrefix 
    instack.push(input[i][c]) 
    File "P:\Scripts\Python\stack.py", line 36, in push 
    print(self.top) 
IndexError: list assignment index out of range 
+1

Bitte immer die vollständige Traceback der Fehlermeldung, die Sie erhalten. –

+0

Und Sie müssen keinen Stapel implementieren. Standard-Python-Listen haben 'append()' und 'pop()' Methoden. –

+0

@SvenMarnach es ist für eine Klasse, die erfordert, dass ich meine eigene Stack-Klasse schreibe. – Ganye

Antwort

0

Ihre Zurückverfolgungs ist inkonsistent. Sie behauptet, die Linie

print(self.top) 

der Grund für die IndexError, aber print() wird nie einen solchen Fehler erhöhen.

Dies kann nur passieren, wenn Sie eine alte Version Ihres Moduls verwenden, die noch in einer Interpreterinstanz geladen ist. Starten Sie Ihren Interpreter neu.

Wenn Sie wirklich Ihre eigenen Stack-Klasse implementieren müssen, können Sie mit etwas dumm aussehen:

class Stack(list): 
    push = list.append 

Dieser Stapel wird eine unbegrenzte Größe haben.

+2

'push = list.append' jetzt das ist nur versucht, das System zu schlagen :) Ich glaube nicht, wer die Aufgabe markiert würde zu sehr davon beeindruckt –

+1

@KshitijMehta: Meine Einstellung ist, dass lächerliche Aufträge lächerliche Lösungen bekommen sollten. Wenn Sie einen Stack in C implementieren sollen, ist das in Ordnung. Ein Stack in Python wird jedoch zwangsläufig auf einer Liste basieren, daher sollten Sie eine Stack-Implementierung auf eine Stack-Implementierung schreiben. Meine vorgeschlagene Implementierung hebt diesen Punkt nur hervor. –