从Python中的空列表中接收索引错误pop
我在使用运行多行算术表达式的测试文件时收到一个索引错误:从空列表弹出。应用后缀符号。我目前使用的Python版本是2.7.6。我收到的错误是索引错误:从空列表弹出。它指向这一行return self.items.pop()。在文本文件中仅使用一行文本时,输出是正确的。然而,每当我在测试文件中放置多行算术表达式时,我就会收到这个错误,这个错误似乎没有任何意义。 下面是我的文本文件中包含的一些示例输入。4.3 5 7.5 * + 4 5 + * 3 4/2.3*-3-我使用的命令是cat test.txt | python something.py 我正在运行的命令是cat test.txt | python something.py从Python中的空列表中接收索引错误pop,python,postfix-notation,Python,Postfix Notation,我在使用运行多行算术表达式的测试文件时收到一个索引错误:从空列表弹出。应用后缀符号。我目前使用的Python版本是2.7.6。我收到的错误是索引错误:从空列表弹出。它指向这一行return self.items.pop()。在文本文件中仅使用一行文本时,输出是正确的。然而,每当我在测试文件中放置多行算术表达式时,我就会收到这个错误,这个错误似乎没有任何意义。 下面是我的文本文件中包含的一些示例输入。4.3 5 7.5 * + 4 5 + * 3 4/2.3*-3-我使用的命令是cat test
#!/usr/bin/python
import sys
import fileinput
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
请提供一段可执行代码来重现错误。使用StringIO或发布输入文件的简短版本。@barrios以下是我的文本文件中包含的一些示例输入。4.3 5 7.5*+4 5+*3 4/2.3*-3-我使用的命令是cat test.txt | python something.py您发布的代码将只打印单个表达式的结果,并且它在我的机器上使用您提供的数据运行良好,即使该表达式被拆分为多行。如果有多个表达式,或者没有足够的运算符将堆栈缩减为单个项,则会打印
-E
。如果堆栈上当前的数字数量有太多的运算符,则将从空列表中获得索引器:pop。顺便说一句,您有一个小的输入错误:最后一个elif
语句应该是elif line==“**”:
。FWIW,有一种更简洁的方法可以做到这一点,它不需要一个巨大的if…elif
套件:你可以使用一个由操作符字符串索引的函数字典。你为什么要编辑掉大部分代码?