AttributeError: ‘str‘ object has no attribute ‘decode‘(或encode)--Keras路上比较坑的报错

之前跑深度学习代码中,我被这个报错坑了很久,下面给出一些我了解的解决方案的汇总。

1. hpy5模块版本过高

卸载原有的hpy5版本重新下载一个即可。

具体步骤:
首先打开anaconda prompt
分别输入以下代码并分别按回车运行即可

卸载

pip uninstall h5py

AttributeError: ‘str‘ object has no attribute ‘decode‘(或encode)--Keras路上比较坑的报错_第1张图片

下载

pip install h5py==2.10 -i https://pypi.tuna.tsinghua.edu.cn/simple/

AttributeError: ‘str‘ object has no attribute ‘decode‘(或encode)--Keras路上比较坑的报错_第2张图片

跑代码试试吧,应该能成了。
啊?你说版本下载好了还是不行?
那请继续下面的步骤!!!

2.字符串的编码解码问题

做法:
1.点进报错的代码行,在.decode(‘x’)的前面加上.encode(‘x’)。(x为原来的字符串)
例如:将xxx. decode('utf-8') 改为xxx.encode('utf-8'). decode('utf-8')

2.如果encode已存在,那就把它删掉,别问为什么,冲!

当然如果整篇代码里面有很多这样的decode语句,那就要先把每行有关decode的代码注释好做备份,再一一进行更改。建议每更改一句就跑一遍代码,看看能不能成功,如果继续出现相同的报错,但是错误在下一个decode代码行,那说明之前的更改有效,可以继续更改,知道程序正常运行。

······当然如果你要问为什么也可以(下面讲一下原因)。

首先了解一下encode和decode这两位大哥:
encode: 把普通字符串转为机器可识别的字节流(bytes)
decode: 把bytes转为字符串

对于python2和3的版本中,又各有差异,Python3的str(字符串)默认不是bytes,所以不能decode,只能先encode转为bytes,再decode;python2的str 默认是bytes,所以能decode。

说白了,python3出现AttributeError: ‘str’ object has no attribute ‘decode’这样的报错原因就是字符串本来不是bytes,还要‘强人所难’加上decode解码,decode的对象不是bytes,就导致错误的出现;
而出现AttributeError: 'str' object has no attribute ‘encode’的情况的话就说明字符串已经是bytes了,还要加上encode编码,bytes再编码就没意义了,所以报错。

因此对于以上两种情况,前者解决方法是加encode,后者解决方法是去掉encode。

你可能感兴趣的:(python,bug,tensorflow)