Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何定位有问题(不可拾取)的对象?_Python_Pickle - Fatal编程技术网

Python 如何定位有问题(不可拾取)的对象?

Python 如何定位有问题(不可拾取)的对象?,python,pickle,Python,Pickle,尝试pickle对象时,我收到以下错误消息: TypeError: cannot serialize '_io.TextIOWrapper' object 有问题的对象类继承了另一个类(pytorch_lightning.LightningModule),因此我假设有问题的对象属于超类。我怎样才能找到它?错误跟踪只指向我的pickling命令,它是 with open(save_path, "wb") as p: pickle.dump(self, p) 根据,您可以通过定义函数来影

尝试pickle对象时,我收到以下错误消息:

TypeError: cannot serialize '_io.TextIOWrapper' object
有问题的对象类继承了另一个类(pytorch_lightning.LightningModule),因此我假设有问题的对象属于超类。我怎样才能找到它?错误跟踪只指向我的pickling命令,它是

with open(save_path, "wb") as p:
    pickle.dump(self, p)
根据,您可以通过定义函数来影响对象的酸洗方式

类可以进一步影响其实例的酸洗方式;如果 类定义方法
\uuuu getstate\uuuu()
,调用该方法并返回 对象作为实例的内容而不是 实例字典的内容。如果
\uuu getstate\uuu()
方法是 如果不存在,则实例的
\uuuuu dict\uuuu
会像往常一样进行酸洗

尝试执行以下操作:

def __getstate__(self):
    for variable_name, value in vars(self).items():
        try:
            pickle.dumps(value)
        expect:
            print('{variable_name} with value {value} is not pickable')
当您尝试pickle对象时,它应该打印出对象的不可拾取对象

替代方法: 如果
\uuu getstate\uuu()
方法是 如果不存在,则实例的
\uuuuu dict\uuuu
会像往常一样进行酸洗


用同样的方法检查对象
\uuuu dict\uuuu
,尝试对每个变量进行pickle处理,找出有问题的变量。

Nice。递归扩展应该非常容易,以便准确地找出有问题的对象在层次结构中的位置。虽然我觉得pickle过程本身应该做到这一点,但我认为您不需要“递归地扩展它”,因为
vars()
为您提供了对象
\uuu dict\uu
,其中也包含所有的超类变量。是的,但是,如果有问题的变量属于属于另一个对象的对象,而另一个对象。。。哪个属于超级阶级?在某些情况下,如果
inspect
可以帮助您,那么最好知道它的确切位置。使用
inspect.getmro
获取对象从中继承的所有类,并使用
inspect.getclosurevars
获取所有继承的类
\uuu init\uuu
变量。