Python repr / str NoneType没有属性

时间:2018-05-26 19:49:48

标签: python-3.x repr

您好我最近遇到了一些奇怪的事情。我有以下课程:

print(tmp["650"].name)
>>> 650
try:
    print(tmp["650"])
except Exception as e:
    print(e)
>>> 'NoneType' object has no attribute 'name'

现在我有一个存储在 tmp 中的实例的dict,其中键是实例的名称,并且它以某种方式具有以下行为

print(tmp["632"].name)
>>> 632
try:
    print(tmp["632"])
except Exception as e:
    print(e)
>>> ---- TreeNode Object ---- 
>>> Name: 632 
>>> parent: 650 
>>> number of children: 3 

这只发生在dict的一个实例上,所有其余的工作都很好。我以同样的方式初始化了所有实例,所以这让我很困惑。

JFrame frame = new JFrame();
        JTextField text = new JTextField();
        frame.add(text);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                text.requestDefaultFocus();
            }
        });

我尝试搜索,但似乎很少有关于str / repr的NoneType异常的信息。感谢阅读,如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

您的TreeNode个实例之一Noneparent属性。在这种情况下,您尝试恢复不存在的None.name

要处理没有父母的节点,您应该在__str__方法中通过替换...

来解决这个问题
"parent: {} \n".format(self.parent.name)

...通过

"parent: {} \n".format(self.parent.name if self.parent else None)

实施例

class TreeNode:
    def __init__(self, name, parent):
        self.name = name
        self.parent = parent
        self.children = []

    def __str__(self):
        string = "---- TreeNode Object ---- \n" + \
            "name: {} \n".format(self.name) + \
            "parent: {} \n".format(self.parent.name if self.parent else None) + \
            "number of children: {} \n".format(len(self.children))
        return string

输出

>>> print(TreeNode('foo', None))
---- TreeNode Object ---- 
name: foo
parent: None 
number of children: 0