Python尝试除了继续无法打印预期的结果

时间:2013-04-19 19:36:52

标签: python exception dictionary python-2.7

有人可以指出我哪里出错了,除了继续或更好的解决这个问题的方法之外,这里究竟发生了什么。

dic = {'arun': 123213, 'hari': 31212, 'akila': 321, 'varun': 12132, 'apple': 3212}
u1 = {'arun': 123123, 'orange': 1324214}
u2 = {'akila': 1234124, 'apple': 123123}
u3 = {'hari': 144}
u4 = {'anna': 23322}
for key, value in dic.iteritems():
    try:
        A = u1[key]
        B = u2[key]
        C = u3[key]
        D = u4[key]

    except KeyError:
        continue
    print A, B, C, D  # fails to print 

4 个答案:

答案 0 :(得分:6)

如果任何查找失败,continue将跳至dic的下一个键。您希望使用即使未找到密钥也能保证给出结果的操作,例如dict.get

for key, value in dic.iteritems():
    A = u1.get(key)  # A is None if not found
    # ...
    print A, B, C, D

答案 1 :(得分:0)

您的'uX'词典与'dic'没有相同的键,因此在尝试检索这些值时失败。然后你捕获异常并调用'continue',它会在print语句执行之前自动跳回到循环的顶部。

尝试取出try / except语句,Python解释器会发出错误信息,确切地说是你的问题所在。

答案 2 :(得分:0)

  • u2['hari']会引发异常
  • u3['akila']也会引发异常
  • u4['varun']将再次提出异常

虽然该项目不存在,但您每次都尝试使用字典中的项目

答案 3 :(得分:0)

试试这个:

dic = {'arun': 123213, 'hari': 31212, 'akila': 321, 'varun': 12132, 'apple': 3212}
u1 = {'arun': 123123, 'orange': 1324214}
u2 = {'akila': 1234124, 'apple': 123123}
u3 = {'hari': 144}
u4 = {'anna': 23322}

for key in dic:
    print list(d.get(key) for d in (u1, u2, u3, u4))

它将您的输出打印为列表:

>>> for key in dic:
...     print list(d.get(key) for d in (u1, u2, u3, u4))
... 
[123123, None, None, None]
[None, 1234124, None, None]
[None, 123123, None, None]
[None, None, 144, None]
[None, None, None, None]