相关疑难解决方法(0)

尝试在__getattr__中返回默认值时,Python pickle崩溃

我有一个像类这样的字典,用于存储一些值作为属性.我最近添加了一些logic(__getattr__),如果属性不存在则返回None.一旦我做了这个泡菜崩溃,我想要了解为什么?

测试代码:

import cPickle
class DictionaryLike(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __iter__(self):
        return iter(self.__dict__)

    def __getitem__(self, key):
        if(self.__dict__.has_key(key)):
            return self.__dict__[key]
        else:
            return None

    ''' This is the culprit...'''    
    def __getattr__(self, key):
        print 'Retreiving Value ' , key
        return self.__getitem__(key)

class SomeClass(object):
    def __init__(self, kwargs={}):
       self.args = DictionaryLike(**kwargs)


someClass = SomeClass()
content = cPickle.dumps(someClass,-1)
print content
Run Code Online (Sandbox Code Playgroud)

结果:

Retreiving Value  __getnewargs__
Traceback (most recent call last):
  File <<file>> line 29, in <module>
    content = cPickle.dumps(someClass,-1)
TypeError: 'NoneType' object is not …
Run Code Online (Sandbox Code Playgroud)

python pickle python-2.7

6
推荐指数
2
解决办法
2247
查看次数

标签 统计

pickle ×1

python ×1

python-2.7 ×1