python:字典get方法的默认值问题

1 投票
1 回答
6202 浏览
提问于 2025-04-16 08:56

我遇到了一个新问题……

代码 1:

try:
   urlParams += "%s=%s&"%(val['name'], data.get(val['name'], serverInfo_D.get(val['name'])))
except KeyError:
   print "expected parameter not provided - "+val["name"]+" is missing"
   exit(0)

代码 2:

try:
   urlParams += "%s=%s&"%(val['name'], data.get(val['name'], serverInfo_D[val['name']]))
except KeyError:
   print "expected parameter not provided - "+val["name"]+" is missing"
   exit(0)

看看 serverInfo_D[val['name']] 和 serverInfo_D.get(val['name'])之间的区别。代码 2 失败了,但代码 1 成功了。

数据:

serverInfo_D:{'user': 'usr', 'pass': 'pass'} 
data: {'par1': 9995, 'extraparam1': 22}
val: {'par1','user','pass','extraparam1'}

在处理数据字典时会引发异常……而且在循环中遍历 val 的所有代码都会出问题。

1 个回答

5

来自文档(dict.get):

如果字典中有这个键,就返回这个键对应的值;如果没有,就返回默认值。如果没有提供默认值,默认会是None,这样这个方法就不会引发KeyError错误。

这就是为什么你的第一段代码能正常工作,而第二段代码不行的原因。

撰写回答