PicklingError: args[0] from

PicklingError: args[0] from,第1张

大纲
  • 详细说明
  • 错误定位
  • 问题解决
  • 需要注意的类似问题
    • TypeError: a bytes-like object is required, not 'str'

详细说明

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

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()方法;

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/571271.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-09
下一篇2022-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存