Python : 简化 try / except 代码?

Python : simplify try / except code?

抱歉,如果标题不够解释,但这是我能想到的最好的。这是我的代码的一部分,一个 python 脚本,将文件从 Xilog3 转换为 woodWOP 格式(cnc 程序)。

try:
    print >>woodWOPfile, 'YA="%s"' %xbo['Y']
except KeyError:
    xbo['Y']=xbo_prev['Y']
    print >>woodWOPfile, 'YA="%s"' %xbo['Y']

这会将字典键项打印到输出文件。如果密钥不存在,我想从以前版本的字典中加载它,xbo_prev,它是在每个新行读取周期之前从 xbo 复制的。

两次使用打印规则似乎很愚蠢,但这是我能想到的最好的。有没有办法简化这个?

谢谢 :).

您可以简单地使用 dict.setdefault:

print woodWOPfile, 'YA="%s"' % xbo.setdefault('Y', xbo_prev['Y'])

如果键 Y 存在于映射中,则获取对应的值,否则将其设置为第二个参数并 returns 它。

if not 'Y' in xbo: 
    xbo['Y']=xbo_prev['Y']
print >>woodWOPfile, 'YA="%s"' %xbo['Y']

为什么不检查它是否存在并先设置它。

现有的两个答案也有效,但如果您知道 xbo_prev 将有您的密钥,则另一种方法是利用 .get()default 参数:

print >>woodWOPfile, 'YA="%s"' % xbo.get('Y', xbo_prev['Y'])

请注意,这不会修改 xbo,如果您打算修改 xbo,您可以像 juanchopanza 建议的那样使用 .setdefault(),尽管我认为将变异操作放在打印语句令人困惑,可能弊大于利。