[英]More elegant way to deal with multiple KeyError Exceptions
我有以下函数,它读取一个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:
一旦第一个丢失的字典键引发错误,它就会停止影响值。
只需使用dict.get
。 每次使用:
try:
country = data['country']
except KeyError:
country = ''
可以等效地替换为:
country = data.get('country', '')
您可以改为遍历键并try
每个key
,成功时将其附加到列表中,失败时附加" "
:
ret = []
for key in {'country', 'type', 'startAddress', 'endAddress', 'parentHandle'}:
try:
ret.append(data[key])
except KeyError:
ret.append([" "])
然后在函数的末尾返回一个元组:
return tuple(ret)
如果有必要的话。
Thx 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.