我有以下函数,它读取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键引发错误,它就会停止影响值。
答案 0 :(得分:3)
只需使用try:
country = data['country']
except KeyError:
country = ''
即可。每次使用:
country = data.get('country', '')
可以等效地替换为:
{{1}}
答案 1 :(得分:1)
您可以为每个public class XptoConverter extends SimpleFormatter<Xpto> {
@Override
public Xpto parse(String input, Locale l) throws ParseException {
return new Xpto().setId(Long.valueOf(input));
}
@Override
public String print(Xpto xpto, Locale l) {
return xpto.getId().toString();
}
}
重复密钥和try
,成功后将其附加到列表中,并在失败后附加key
:
" "
然后在函数结束时返回一个元组:
ret = []
for key in {'country', 'type', 'startAddress', 'endAddress', 'parentHandle'}:
try:
ret.append(data[key])
except KeyError:
ret.append([" "])
如果有必要的话。
答案 2 :(得分:0)
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)