【问题标题】:Method returns 'NoneType' object方法返回“NoneType”对象
【发布时间】:2021-03-12 07:04:13
【问题描述】:

所以方法看起来像这样:

def find_node(self, sym, root):
    if root.symbol == sym:
        print(root.__str__())
        print(isinstance(root, Node))
        return root
    if root.l is not None:
        self.find_node(sym, root.l)
    if root.r is not None:
        self.find_node(sym, root.r)

在一些递归调用之后,它找到了我们正在寻找的节点并返回它。在返回之前,检查 isinstance() 返回 True,所以它不是 NoneType 对象。

现在,获取结果的方法是:

def code_path(c_tree, sym):
    node = c_tree.find_node(sym, c_tree.get_root())
    print(isinstance(node, Node))

isinstance 方法返回 false - 节点实例为 NoneType。

当上一个方法返回的对象是正确类型之一时,我无法弄清楚 NoneType 对象是如何返回的。有什么想法吗?

【问题讨论】:

标签: python object nonetype


【解决方案1】:
def find_node(self, sym, root):
    if root.symbol == sym:
        print(root.__str__())
        print(isinstance(root, Node))
        return root
    elif root.l is not None:
        return self.find_node(sym, root.l)
    elif root.r is not None:
        return self.find_node(sym, root.r)

您还需要返回递归调用。

【讨论】:

  • 这似乎是正确的,但它现在不能按预期工作。该方法的目标是返回具有 node.symbol = sym 的二叉树的节点。在我最初的实现中,它会在一些调用后找到这个节点,但它不会返回它。现在,它找到一个带有 node.symbol != sym 的节点并再次返回 NoneType。我很困惑。
  • 代码的逻辑没有改变,它的行为方式相同。我需要一些调试细节,print(node)code_path 中的输出是什么?
  • 输出为无。
  • 也是同一个Node类的self和root istances?
  • 不,self 是 Tree 类
【解决方案2】:

如果第一个 if 条件通过,函数就返回任何东西,所以它返回 None。

这是你应该做的(如果我理解你想要做什么):

def find_node(self, sym, root):
    if root.symbol == sym:
        print(root.__str__())
        print(isinstance(root, Node))
        return root
    if root.l is not None:
        return self.find_node(sym, root.l)
    if root.r is not None:
        return self.find_node(sym, root.r)

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 2020-06-04
    • 2019-10-20
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2018-11-29
    相关资源
    最近更新 更多