ITよろづや

ITから生活の参考になる情報を備忘録代わりに残していきます

Python3 エラー “ 'dict' object has no attribute 'iteritems' ” future.utils、sixモジュールで対処

Python3でPython2で使っていたスクリプトを実行すると、エラー “ 'dict' object has no attribute 'iteritems' ”が出力されることがあります。

 

調べると、Python 2 では iter(dict.iteritems())、Python 3 では iter(dict.items()) に展開
dict_items オブジェクトはイテレータとは属性が異なるとあります。その為、スクリプト内に使用している場合は変更することで対処が可能です。

 

スクリプトを変更せずにこの対処をしたい場合は、以下のサイトが参考になります。

https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems

 

以下は質問内容で、同じようなエラーがでています。

 

NetworkXを使用してシェープファイルを読み取り、関数write_shp()を使用してノードとエッジを含むシェープファイルを生成しようとしていますが、コードを実行しようとすると、次のエラーが発生します。

 

Traceback (most recent call last): File
"C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in
<module>
nx.write_shp(redVial, "shapefiles") File "C:\Python34\lib\site-packages\networkx\readwrite\nx_shp.py", line
192, in write_shp
for key, data in e[2].iteritems(): AttributeError: 'dict' object has no attribute 'iteritems'

 

Python 3.4を使用しており、pipinstallを介してNetworkXをインストールしました。

 

 

回答です。

 

python3を使用しているため、dict.items()代わりにを使用してくださいdict.iteritems()

iteritems() python3で削除されたため、このメソッドは使用できなくなりました。

Python 3.0Wikiの組み込みの変更セクションを見てください。

削除されたdict.iteritems()、dict.iterkeys()とdict.itervalues()。

代わりに:使用dict.items()、dict.keys()およびdict.values() 。

 

Pythonバージョン(Python2対Python3)に関連している可能性があると書かれています。色々と調べると、サードパーティツールで対処できるようです。

 

推奨されるアプローチiteritemsは、代わりにfuture.utilsまたはsixモジュールの機能を使用することであるように思われます。 –

 

■future.utils

https://pypi.org/project/future/

 

futureは、Python2とPython3の間に欠落している互換性レイヤーです。これにより、単一のクリーンなPython 3.x互換コードベースを使用して、最小限のオーバーヘッドでPython2とPython3の両方をサポートできます。

 

検証環境があるなら接続できるか試してみるといいかもしれません。

 

ロジクール ワイヤレスマウス 無線 マウスM185RD 小型 電池寿命最大12ケ月 M185 レッド 国内正規品 3年間無償保証