天天看点

Python 2.x 与 3.x 版本不同造成的报错处理

当前系统使用的Python版本为3.6.0.

运行一些网上下载的代码时,由于代码经常是数年前用Python 2.x 编写的,一些函数用法上会出现变化,直接运行会发生报错。

记录一下今天见到的小问题:

1.Error ‘dict’ object has no attribute ‘iteritems’

Python3 中 字典的 iteritems 属性被改名为了 item

报错信息 对应方法
Error ‘dict’ object has no attribute ‘iteritems’ 把dict.iteritems() 改成 dict.items() 即可

更多的,

dict.iterkeys() ⟶ dict.keys()
dict.itervalues() ⟶ dict.values()

可以参考Stcakoverflow的这个问题的回答

2.from pil import image 报错 DLL load failed

pillow(PIL)报错找不到DLL,更新库可以解决

报错信息 对应方法
from pil import image 报错 DLL load failed: 找不到指定的程序 我将pillow 从4.1.0升级到了4.2.1(最新),解决

出现这样的错误原因还不是很理解,但与相关的库文件安装不全可能有关,所以升级了pillow,解决了问题。

3.TypeError: ‘dict_keys’ object does not support indexing

在python2中,key()方法返回的是一个列表;

而在python3中,其返回的是一个dict_keys对象;

所以我们使用 索引index ,取key()中的一个元素的时候,

在python3中,就不能直接使用,要使用list方法将dict_keys对象转换成列表。

参考

简单的讲,用 list() 把报错部分的 dict_keys() 对象变成 列表对象 ,就可以使用index索引了。