This post is also available in: English-US (英語)
pyhonでのエラー TypeError: 'NoneType' object is not iterable に関してのメモです。
JSON形式のデータをjsonモジュール(import json)を使って辞書オブジェクト(連想配列)にして加工する時に、このエラーによく出会います。
pyhonで辞書オブジェクト(連想配列)をappendする際に、辞書に存在しないキーでアクセスすると KeyError: とエラーが出ます。
その際には get() を使うとエラーが出なくなります。
サンプルデータ(data)と、サンプルリスト(datalistA,datalistB)です。
data = { "menuitem": [ {"value": ["New", "Open"]}, {"value": ["Create", "Read"]}, {"input": ["AAA", "BBB"]} ] } datalistA = [] datalistB = []
for i in data['menuitem']: # datalistB.append(i['value']) # KeyError: 'value' datalistA.append(i.get('value')) # [['New', 'Open'], ['Create', 'Read'], None]
appendでリストが入れ子(多重リスト)になると困る時には extend を使いますが、get() を使うと辞書に存在しないキーは None で返ってきます。
それが原因でエラー TypeError: 'NoneType' object is not iterable が発生します。
なので、 try-except-else 文とかを使って回避します。 except-else の部分でなにもしたくない場合には単純に pass と書いておきます。
#data の内容はappendの例と同じ for i in data['menuitem']: try: datalistB.extend(i.get('value')) # ['New', 'Open', 'Create', 'Read'] except TypeError: print "Someting" # try-except-else文がない場合 TypeError: 'NoneType' object is not iterable else: pass
流行のPythonやRubyについて学びたいという方は 世界最大級のオンライン学習サイトUdemy をおすすめします。
No tags for this post.