Python dicts:Key显然没有找到,即使它显然存在

时间:2015-08-10 22:48:20

标签: python

好的,我必须在这里找到一些非常明显的东西。我有这段代码:

if (field_ref in choices) or (field['id'] in choices) or (field['name'] in choices):
    print(field_ref, field['id'], field['name'], choices)
    kwargs.update(choice_aliases=choices.get(field_ref, choices.get(field['id'], choices[field['name']])))

我在KeyError部分获得了choices[field['name']]print语句的输出为:

('organization_type', 1953522, u'What type of organization are you?',
 {
  'organization_type': {'as_club': 3272046, 'other': 3272049, 'as_program_office': 3272045, 'wwu_department': 3272047, 'student': 3272048}, 
  'products_requested': {'handbills': 3268398, 'other': 3268405, 'table_tents': 3268404, 'posters': 3268397, 'banners': 3268399, 't_shirts': 3268401, 'digital_signage': 3268400, 'brochures': 3268403, 'invitations': 3268402}
 }
)

(输出是一个元组的原因是因为这是Python 2.7)。如您所见,field_ref的值为'organization_type''organization_type'字典中的值choices相同,if语句的值为{ {1}}因为我们已经在其中,所以很明显三个陈述中至少有一个应该保证有效。是什么赋予了?

如果重要,具体错误是

True

这是KeyError: u'What type of organization are you?' 的值。

编辑:我抓住了慢;解析行时会计算field['name'],而不是在其他两个choices[field['name']]未能找到任何内容并且返回其默认值之后,就像我在想的那样。感谢大家的帮助。

3 个答案:

答案 0 :(得分:3)

如错误所示,密钥为choices

在字典public void sendImage() { FileStream fs = new FileStream(Server.MapPath("test.png"), FileMode.Open); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); ImageWebService servis = new ImageWebService(); string sonuc = servis.SaveProductImage(buffer, "test.png"); Response.Write(sonuc); } 中,没有关键字对等于“你是什么类型的组织?”。这就是问题所在。

答案 1 :(得分:1)

为什么不省略if而只依赖于.get来挑选要使用的值:

kwargs.update(choice_aliases=choices.get(field_ref, choices.get(field['id'], choices.get(field['name']))))

如果选项中不存在这些键,则{​​{1}}的值将为choice_aliases=

如果您不想在kwargs中使用None值,请按以下方式测试None

None

答案 2 :(得分:0)

基于'if'逻辑,由于所有逻辑检查都是'或',因此不保证字段['name']处于选择状态。如果需要满足所有条件,则将'或'更改为'和'。我的猜测是,你不会满意的。