[python-3] TypeError:必须是str,而不是int
问题描述:
我有一个问题,解析树代码。当我试图用后期订单展示它时,它给了我一个错误消息,应该是str参数,而不是int。[python-3] TypeError:必须是str,而不是int
from classStack import Stack
from classTree import BinaryTree
def buildParseTree(fpexp):
fplist = fpexp.split()
pStack = Stack()
eTree = BinaryTree('')
pStack.push(eTree)
currentTree = eTree
for i in fplist:
if i == '(':
currentTree.insertLeft('')
pStack.push(currentTree)
currentTree = currentTree.getLeftChild()
elif i not in ['+', '-', '*', '/', ')']:
currentTree.setRootVal(int(i))
parent = pStack.pop()
currentTree = parent
elif i in ['+', '-', '*', '/']:
currentTree.setRootVal(i)
currentTree.insertRight('')
pStack.push(currentTree)
currentTree = currentTree.getRightChild()
elif i == ')':
currentTree = pStack.pop()
else:
raise ValueError("No se contempla el carácter evaluado")
return eTree
ParseTree = buildParseTree("(8 * 5)")
ParseTree.printPostordenTree(0)
错误:
Traceback (most recent call last):
File "C:\Users\Franco Calvacho\Downloads\Árboles\parseTree.py", line 38, in <module>
ParseTree.printPostordenTree(0)
File "C:\Users\Franco Calvacho\Downloads\Árboles\classTree.py", line 62, in printPostordenTree
self.getLeftChild().printPostordenTree(n+1)
File "C:\Users\Franco Calvacho\Downloads\Árboles\classTree.py", line 67, in printPostordenTree
print("Level: "+ str(n) + " " + self.getRootVal())
TypeError: must be str, not int
[Finished in 0.2s]
这里的二叉树代码。我明确指出,BinaryTree代码本身就可以,它不会给我那个错误信息。 在那个代码下,我给你留下了python的评论,你可以看到。
class BinaryTree(object):
def __init__(self, data):
self.key = data
self.leftChild = None
self.rightChild = None
def insertLeft(self, newNode):
if self.leftChild == None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
def insertRight(self, newNode):
if self.rightChild == None:
self.rightChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.rightChild = self.rightChild
self.rightChild = t
def getRightChild(self):
return self.rightChild
def getLeftChild(self):
return self.leftChild
def setRootVal(self, obj):
self.key = obj
def getRootVal(self):
return self.key
def printPreordenTree(self, n):
if self.getRootVal() != None:
print("Level: "+ str(n) + " " + self.getRootVal())
n+=1
if self.getLeftChild() != None:
self.getLeftChild().printPreordenTree(n)
if self.getRightChild() != None:
self.getRightChild().printPreordenTree(n)
return n
def printInordenTree(self, n):
if self.getRootVal() != None:
if self.getLeftChild() != None:
self.getLeftChild().printInordenTree(n+1)
print("Level: "+ str(n) + " " + self.getRootVal())
n+=1
if self.getRightChild() != None:
self.getRightChild().printInordenTree(n)
return n
def printPostordenTree(self, n):
if self.getRootVal() != None:
if self.getLeftChild() != None:
self.getLeftChild().printPostordenTree(n+1)
if self.getRightChild() != None:
self.getRightChild().printPostordenTree(n+1)
print("Level: "+ str(n) + " " + self.getRootVal())
n+=1
return n
"""a = BinaryTree("a")
a.insertLeft("b")
a.insertRight("c")
a.getLeftChild().insertLeft("d")
a.getRightChild().insertLeft("e")
a.getRightChild().insertRight("f")
print("Imprimo el árbol de forma Preorden")
a.printPreordenTree(0)
print("\nImprimo el árbol de forma Inorden")
a.printInordenTree(0)
print("\nImprimo el árbol de forma Postorden")
a.printPostordenTree(0)"""
答
print("Level: "+ str(n) + " " + self.getRootVal())
TypeError: must be str, not int
这解释了错误:只能追加使用“+”操作符,而不是整数,字符串为字符串。 前三个参数是字符串,但不是self.getRootVal()
。
第一个可能的解决方案:它转换为str,像你这样n
做:
print("Level: "+ str(n) + " " + str(self.getRootVal()))
或者您可以使用格式字符串:
print("Level: {} {}".format(n, self.getRootVal()))
后者不要求你投的参数字符串,并可能更好的可读性。
答
我发现了这个错误。谢谢大家的快速回答,这是我第一次使用Stack Overflow,并且我很高兴注意。
再一次,谢谢。问题解决了。
我的错误是我把“)”放在第二个elif中,并且不允许打印“*”。
可能的重复[在Python中使用字符串和整数生成字符串](https://stackoverflow.com/questions/2823211/making-a-string-out-of-a-string-and-an -integer-in-python) –
'self.getRootVal()'可能在违规行上返回一个int。 –
'currentTree.setRootVal(int(i))'将根设置为一个整数。 'self.getRootVal()'返回整数,如上面Jared所说。该bug可能首先将其设置为整数,节点需要是字符串。 – Annan