天天看點

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索引了。