p1:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 8: illegal multibyte sequence
解决:
原来:for line in open(in_file):
修改为:for line in open(in_file,‘rb’):
或者:for line in open(in_file,‘r’,encoding=‘utf-8’):
p2:TypeError: a bytes-like object is required, not ‘str’
这就说明我们需要把一个str转换为一个byte 这个时候要用上.encode('utf-8')
原来:contents = in_line.strip().split("\t")
改为:contents = in_line.encode(‘utf-8’).strip().split("\t")
p3 AttributeError: ‘bytes’ object has no attribute ‘encode’
把encode 改为decode 即可
原来:contents = in_line.encode(‘utf-8’).strip().split("\t")
改为:contents = in_line.decode().strip().split("\t")
p4 ‘ascii’ codec can’t decode byte 0xe6 in position 0: ordinal not in range(128)
一般就是load的时候,需要在load里面加上 ,encoding = 'bytes'
原来:song_dic = pickle.load(open("./pkl_all/popular_song.pkl",“rb”))
改为:song_dic = pickle.load(open("./pkl_all/popular_song.pkl",“rb”),encoding=‘bytes’)
p5 TypeError: ‘dict_keys’ object is not subscriptable
字典遇到.keys()的时候 因为python2 跟python3语法有出入 所以要在外面加上list
原来:for song in song_dic.keys()[:10]:
改为:for song in list(song_dic.keys())[:10]:
p6 TypeError: ‘int’ object is not iterable
代码错误发生在这里
在网上搜了很多方法 有人说我for循环的时候 in 后面的不能是整型 所以要加个range 后面发现还是报错 因此不是这个问题
然后我去搜了一下word2vec里面most_similar怎么用 后来首一张图启发:
可以看到similar括号里面的是一个u 但是我的song_id显然是个byte啊
所以解决办法很简单 只需要把song_id转化为str即可
原来:model.most_similar(song_id)
改为:model.most_similar(song_id.decode())
p7 KeyError: ‘4877016’
原来: print("\t", song_dic[song[0]], song[1])
说明我字典里面的格式又不对了,我字典song_dic里面需要的时byte 显然现在是str类型 只要把字典里面的转为byte即可
改为:print("\t",song_dic[song[0].encode(‘utf-8’)], song[1])
p8 输出是二进制的问题
这个太简单了 在所有的输出后面加上decode() 就可以转回来了
原来:print("\t",song_dic[song[0].encode(‘utf-8’)], song[1])
改为:print("\t",song_dic[song[0].encode(‘utf-8’)].decode(), song[1])
p9 AttributeError: module ‘tensorflow’ has no attribute ‘truncated_normal_initialize’
这个出现的原因是tensorflow里面有一些函数可能改版了 就不是这么用的了:
tf.initializers.truncated_normal类
tf.keras.initializers.TruncatedNormal类
tf.truncated_normal_initializer类
了解到这三个类是同一个类
[参考](https://www.w3cschool.cn/tensorflow_python/tensorflow_python-4pyc2nuy.html)
原来:tf.truncated_normal_initialize(stddev=0.02)
改为:tf.initializers.truncated_normal(stddev=0.02)
p10 NameError: name ‘long’ is not defined
原因是Python3.x中没有long类型,只有int类型。
Python2.x中既有long 类型又有int 类型。
原来:long(fields[3]) % 10
改为:int(fields[3])%10