提问人:Stéphane 提问时间:7/5/2016 最后编辑:Dimitris Fasarakis HilliardStéphane 更新时间:7/24/2020 访问量:2416
处理多个KeyError异常的更优雅的方式
More elegant way to deal with multiple KeyError Exceptions
问:
我有以下函数,它读取 a 并影响局部变量的一些值,然后这些值作为元组返回。dict
问题在于字典中可能不存在某些所需的键。
到目前为止,我有这个代码,它可以做我想要的,但我想知道是否有更优雅的方法可以做到这一点。
def getNetwork(self, search):
data = self.get('ip',search)
handle = data['handle']
name = data['name']
try:
country = data['country']
except KeyError:
country = ''
try:
type = data['type']
except KeyError:
type = ''
try:
start_addr = data['startAddress']
except KeyError:
start_addr = ''
try:
end_addr = data['endAddress']
except KeyError:
end_addr = ''
try:
parent_handle = data['parentHandle']
except KeyError:
parent_handle = ''
return (handle, name, country, type, start_addr, end_addr, parent_handle)
我有点害怕,但如果我把所有的影响放在一个中,一旦第一个缺少的字典键引发错误,它就会停止影响值。try: except:
try: except:
答:
1赞
Dimitris Fasarakis Hilliard
7/5/2016
#1
相反,您可以遍历键,对于每个键,在成功时将其附加到列表中,在失败时附加:try
key
" "
ret = []
for key in {'country', 'type', 'startAddress', 'endAddress', 'parentHandle'}:
try:
ret.append(data[key])
except KeyError:
ret.append([" "])
然后在函数的末尾返回一个元组:
return tuple(ret)
如果有必要的话。
6赞
ShadowRanger
7/5/2016
#2
只需使用 .每次使用:dict.get
try:
country = data['country']
except KeyError:
country = ''
可以等效地替换为:
country = data.get('country', '')
0赞
Stéphane
7/5/2016
#3
谢谢 ShadowRanger,有了你的回答,我去了下面的代码,这确实读起来更舒适:
def getNetwork(self, search):
data = self.get('ip',search)
handle = data.get('handle', '')
name = data.get('name', '')
country = data.get('country','')
type = data.get('type','')
start_addr = data.get('start_addr','')
end_addr = data.get('end_addr','')
parent_handle = data.get('parent_handle','')
return (handle, name, country, type, start_addr, end_addr, parent_handle)
评论