Python 禁止索引器调用整数

Python 禁止索引器调用整数,python,python-3.x,stack-overflow,Python,Python 3.x,Stack Overflow,我正在开发一个使用堆栈类的中缀前缀程序。然而,每当我调用整数时,push()方法都会引发一个索引器,即使我有一个异常处理程序,并且我引用的是整数本身,而不是列表 stack.py: class stack(): def __init__(self,n): self.n = n self.top = -1 self.stack = [""] * n #... def push(self,c): try:

我正在开发一个使用堆栈类的中缀前缀程序。然而,每当我调用整数时,push()方法都会引发一个索引器,即使我有一个异常处理程序,并且我引用的是整数本身,而不是列表

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])
错误:

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
回溯(最近一次呼叫最后一次):
文件“”,第247行,在run_nodebug中
文件“P:\Scripts\Python\ascl pip.py”,第42行,在
toPrefix(中缀)
toPrefix中第37行的文件“P:\Scripts\Python\ascl pip.py”
instack.push(输入[i][c])
文件“P:\Scripts\Python\stack.py”,第36行,在push中
打印(self.top)
索引器:列表分配索引超出范围

您的回溯不一致。它主张这条线

print(self.top)
是导致
索引器
的原因,但
print()
永远不会引发此类错误

发生这种情况的唯一方法是,您使用的是仍然加载在解释器实例中的旧版本模块。重新启动解释器

如果您真的需要实现自己的堆栈类,您可以使用以下愚蠢的方法:

class Stack(list):
    push = list.append

此堆栈的大小不受限制。

请始终包含您收到的错误消息的完整回溯。并且您不需要实现堆栈。标准Python列表有
append()
pop()
方法。@SvenMarnach这是一个需要我编写自己的堆栈类的类。您对
toPrefix
的输入是一个包含三个字符串的列表。“abcde”、“abcde”和“abcdef”,所以应该有一个索引器,但它没有被异常处理程序捕获,而且索引器不是来自输入或堆栈变量。
push=list.append
现在这只是试图击败系统:)我认为标记赋值的人不会对that@KshitijMehta当前位置我的态度是荒谬的任务应该得到荒谬的解决方案。如果你想用C实现一个堆栈,那没关系。然而,Python中的堆栈不可避免地基于列表,因此您应该在堆栈实现之上编写一个堆栈实现。我建议的实施只是强调了这一点。