私はget_profile(js)
のような関数を書く方法を探していますが、すべての醜いtry/exceptsはありません。Python - jsonオブジェクトからデータを取得している間に何十回もtry/exceptブロックを避けるためのエレガントな方法はありますか?
jsonフィールドが存在しないことがあるため、各割り当てはtry/exceptにあります。私は[]
などのいくつかのデフォルトを設定していますが、すべてをデフォルトにしたエレガントなソリューションに満足しています。そうすれば、全体的なコードをもっとうまく作成できます。 dictionaries
def get_profile(js):
""" given a json object, return a dict of a subset of the data.
what are some cleaner/terser ways to implement this?
There will be many other get_foo(js), get_bar(js) functions which
need to do the same general type of thing.
"""
d = {}
try:
d['links'] = js['entry']['gd$feedLink']
except:
d['links'] = []
try:
d['statisitcs'] = js['entry']['yt$statistics']
except:
d['statistics'] = {}
try:
d['published'] = js['entry']['published']['$t']
except:
d['published'] = ''
try:
d['updated'] = js['entry']['updated']['$t']
except:
d['updated'] = ''
try:
d['age'] = js['entry']['yt$age']['$t']
except:
d['age'] = 0
try:
d['name'] = js['entry']['author'][0]['name']['$t']
except:
d['name'] = ''
return d
明示的なループを使って書かれた場合、getgetが読みやすくなるかもしれません。それ以外の場合は素晴らしいアイデアです。私はこれを 'getget( 'entry'、 'gd $ feedLink'、default = [])のように呼ぶ方が好きですが、いい考えです。 –
これは素晴らしい解決策です。'[0]'があった場合は、実際には辞書ではないリストです。それは実際に私が探していたものです(そして、何年か前に書かれたこともありますが、現時点では手軽ではありません)。 –