PicklingError: args[0] from __newobj__ args has the wrong class

详细说明

在跑网上代码的时候出现了这个错误

PicklingError: args[0] from __newobj__ args has the wrong class

用了很长时间终于解决该问题,下面详细说一下。

由于跑的代码是几年前的老代码了,当时原作者使用的是python2.x版本。我则依旧使用python3.x。代码的转换也是用了一个下午,后来才发现,python自带转换方法。如下

2to3 -w ***.py

但是转换也只能转换一些简单地基础的语法问题,比如print,所以后续也一直磕磕绊绊的改代码来跑。
出现错误的时候大概也知道是py2和py3不兼容的问题,在国外社区发现了类似问题,根源大概是因为

python3中的pickle.dumps,它返回字节,而在python2中,它返回str。

后来也证实该问题在py2.7下该错误不存在,而py3下存在该错误。

错误定位

tensorflow内置的preprocessing.VocabularyProcesso函数
一般我们在进行文本处理时,需要写方法建立词汇表和word到idx,以及idx到word的映射关系,这就需要统计词汇表中的所有单词并建立相应的词典。

问题解决

将self去掉。
该文件通常在你的项目里面被命名为preprocess.py,可以参考下面这个找到对应位置,进行修改。
在这里插入图片描述

需要注意的类似问题

TypeError: a bytes-like object is required, not ‘str’

报错原因:
python3和Python2在套接字返回值解码上有区别。可以使用encode(),decode()做切换

  • str通过encode()方法可以编码为指定的bytes;
  • 把bytes变为str,就需要用decode()方法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值