Python – 有一种优雅的方法可以避免数十个try / except块从json对象中获取数据吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python – 有一种优雅的方法可以避免数十个try / except块从json对象中获取数据吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1794字,纯文字阅读大概需要3分钟。
内容图文
![Python – 有一种优雅的方法可以避免数十个try / except块从json对象中获取数据吗?](/upload/InfoBanner/zyjiaocheng/766/d87b49f77bb24f66acd0ba419bd5054b.jpg)
我正在寻找方法来编写像get_profile(js)这样的函数但没有所有丑陋的尝试/例外.
每个赋值都在try / except中,因为偶尔json字段不存在.我很高兴有一个优雅的解决方案,默认一切都为无,即使我将一些默认设置为[]等,如果这样做会使整个代码更好.
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
解决方法:
试试像……
import time
def get_profile(js):
def cas(prev, el):
if hasattr(prev, "get") and prev:
return prev.get(el, prev)
return prev
def getget(default, *elements):
return reduce(cas, elements[1:], js.get(elements[0], default))
d = {}
d['links'] = getget([], 'entry', 'gd$feedLink')
d['statistics'] = getget({}, 'entry', 'yt$statistics')
d['published'] = getget('', 'entry', 'published', '$t')
d['updated'] = getget('', 'entry', 'updated', '$t')
d['age'] = getget(0, 'entry', 'yt$age', '$t')
d['name'] = getget('', 'entry', 'author', 0, 'name' '$t')
return d
print get_profile({
'entry':{
'gd$feedLink':range(4),
'yt$statistics':{'foo':1, 'bar':2},
'published':{
"$t":time.strftime("%x %X"),
},
'updated':{
"$t":time.strftime("%x %X"),
},
'yt$age':{
"$t":"infinity years",
},
'author':{0:{'name':{'$t':"I am a cow"}}},
}
})
对我来说,假设你有一个带有0的键而不是列表的字典,这是一种信念的飞跃,但是……你明白了.
内容总结
以上是互联网集市为您收集整理的Python – 有一种优雅的方法可以避免数十个try / except块从json对象中获取数据吗?全部内容,希望文章能够帮你解决Python – 有一种优雅的方法可以避免数十个try / except块从json对象中获取数据吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。