欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中关于TypeError: can't pickle instancemethod objects的错误解决方案

程序员文章站 2022-05-28 12:23:08
...

python中关于TypeError: can’t pickle instancemethod objects的错误解决方案

  • 在本人关于多进程下运行类方法一文中有遇到上述错误,通过相关搜索了解到,可能是我们在实例化多进程对象的过程中,实例化对象的某些属性没有办法序列化导致。下面通过具体的代码进行实例化对象是否存在不能序列化现象的验证。
  • 首先在类中定义如下的方法:
def __getstate__(self):
     return self.__dict__
  • 同样在定义一个get_pickling_errors()函数
import pickle
def get_pickling_errors(obj,seen=None):
    if seen == None:
        seen = []
    try:
        state = obj.__getstate__()
    except AttributeError:
        return
    if state == None:
        return
    if isinstance(state,tuple):
        if not isinstance(state[0],dict):
            state=state[1]
        else:
            state=state[0].update(state[1])
    result = {}    
    for i in state:
        try:
            pickle.dumps(state[i],protocol=2)
        except pickle.PicklingError:
            if not state[i] in seen:
                seen.append(state[i])
                result[i]=get_pickling_errors(state[i],seen)
    return result
  • 最后我们实例化一个对象,运行上述函数。
my_instance = My_Class()
get_pickling_errors(my_instance)
{'_gen': {}, '_base': {'_gens': None}}

-综合上述实验结果我们不难发现类My_Class的实例my_instance的属性_gen以及其父类的_gen是不能被pickle的,到此我的问题也就解决了。

相关标签: python 序列化