好的,我必须在这里找到一些非常明显的东西。我有这段代码:
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']]
未能找到任何内容并且返回其默认值之后,就像我在想的那样。感谢大家的帮助。
答案 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']处于选择状态。如果需要满足所有条件,则将'或'更改为'和'。我的猜测是,你不会满意的。