【问题标题】:variable that is occurring as NoneType where it should have been String作为 NoneType 出现的变量,它应该是 String
【发布时间】:2022-11-04 14:53:26
【问题描述】:

我的遍历参数正在引发 NoneType 我期望它是一个字符串

class node(object): 
    def __init__(self,value):
        self.value= value 
        self.left= None 
        self.right= None 

class binarytree(object): 
    def __init__(self,root):
        self.root=node(root)  
    def print_tree(self,traversal_type): 
        if traversal_type == "preorder": 
            return self.preorder_print(self.root,"") 
        else:
            return f"Traversal type {traversal_type} not supported."
    def preorder_print(self,start,traversal):
        if start:
            traversal += (str(start.value)+"-")
            traversal= self.preorder_print(start.left,traversal) 
            traversal= self.preorder_print(start.right,traversal) 
            return traversal 


tree=binarytree(1) 
tree.root.left=node(2) 
tree.root.right=node(3) 
tree.root.left.left=node(4) 
tree.root.left.right=node(5)

print(tree.print_tree("preorder")) 

我期待字符串并得到NoneType。 在第 12 行

return self.preorder_print(self.root,"") 

"" 是 str 类型,但在第 16 行

traversal += (str(start.value)+"-") 

发生错误说

unsupported operand type(s) for +=: 'NoneType' and 'str'

【问题讨论】:

    标签: python-3.x types


    【解决方案1】:

    当没有左或右节点时,变量traversal 将被None 覆盖。

    请参阅下面的代码,其中在 self.preorder_printstart.leftstart.right 调用 traversal += (str(start.value)+"-") 之后,当条件在 if start: 失败时返回 None

    所以下面的代码应该可以解决这个问题,请尝试一下。

    class node(object): 
        def __init__(self,value):
            self.value= value 
            self.left= None 
            self.right= None 
    
    class binarytree(object): 
        def __init__(self,root):
            self.root=node(root)  
        def print_tree(self,traversal_type): 
            if traversal_type == "preorder": 
                return self.preorder_print(self.root,"") 
            else:
                return f"Traversal type {traversal_type} not supported."
        def preorder_print(self,start,traversal):
            if start:
                traversal += (str(start.value)+"-")
                print("1",traversal)
                traversal= self.preorder_print(start.left,traversal) 
                print("2",traversal)
                traversal= self.preorder_print(start.right,traversal) 
                print("3",traversal)
                return traversal
            return ''
    
    
    tree=binarytree(1)
    tree.root.left=node(2) 
    tree.root.right=node(3) 
    tree.root.left.left=node(4) 
    tree.root.left.right=node(5)
    
    print(tree.print_tree("preorder"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2021-05-19
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多