【问题标题】:KeyError: '_OrderedDict__root?KeyError:'_OrderedDict__root?
【发布时间】:2016-09-09 20:15:15
【问题描述】:

您好,我有以下代码 sn-p,它给出了 KeyError。我已经检查了指定make __init__ call to Ordered Dict 的其他链接,我已经完成了。但还是没有运气。

from collections import OrderedDict

class BaseExcelNode(OrderedDict):
    def __init__(self):
        super(BaseExcelNode, self).__init__()
        self.start_row = -1
        self.end_row = -1
        self.col_no = -1

    def __getattr__(self, name):
        return self[name]

    def __setattr__(self, name, value):
        self[name] = value
BaseExcelNode()

Error:

Traceback (most recent call last):
  File "CIMParser.py", line 29, in <module>
    BaseExcelNode()
  File "CIMParser.py", line 9, in __init__
    super(BaseExcelNode, self).__init__()
  File "C:\Python27\lib\collections.py", line 64, in __init__
    self.__root
  File "CIMParser.py", line 15, in __getattr__
    return self[name]
KeyError: '_OrderedDict__root'

【问题讨论】:

    标签: python ordereddictionary


    【解决方案1】:

    使用猴子补丁法:

    from collections import OrderedDict
    
    class BaseExcelNode(OrderedDict):
        def __init__(self):
            super(BaseExcelNode, self).__init__()
            self.start_row = -1
            self.end_row = -1
            self.col_no = -1
    
        def __getattr__(self, name):
            if not name.startswith('_'):
                return self[name]
            super(BaseExcelNode, self).__getattr__(name)
    
        def __setattr__(self, name, value):
            if not name.startswith('_'):
                self[name] = value
            else:
                super(BaseExcelNode, self).__setattr__(name, value)
    
    b = BaseExcelNode()
    

    【讨论】:

      【解决方案2】:

      OrderedDict 是在属性访问通过默认机制工作的假设下实现的,特别是属性访问不等同于索引。

      当您对它进行子类化并更改属性访问的工作方式时,您就打破了OrderedDict 实现的最深层假设之一,一切都将陷入困境。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2015-04-12
        • 1970-01-01
        • 2016-12-02
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多