Python:简化try / except代码?

时间:2015-12-07 21:34:44

标签: python cnc

对不起,如果标题不够清晰,但它是我能想到的最好的。这是我的代码的一部分,一个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复制。

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

谢谢:)。

3 个答案:

答案 0 :(得分:9)

您可以简单地使用dict.setdefault

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

如果它存在于地图中,则获取与键Y对应的值,否则将其设置为第二个参数并返回它。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

请注意,这不会修改xbo,如果您打算修改xbo,您可以像juanchopanza建议的那样使用.setdefault(),尽管我认为提出变异印刷声明中的操作令人困惑,并且可能造成弊大于利。