【问题标题】:Python : simplify try / except code?Python:简化 try / except 代码?
【发布时间】:2015-12-07 21:34:44
【问题描述】:

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

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

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

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

谢谢:)。

【问题讨论】:

  • xbo_prev 总是有钥匙吗?
  • 摩根的问题非常重要,因为如果xbo_prev 总是有密钥,最简单的方法与xbo_prev 可能没有密钥的最简单方法不同。
  • 是的,字典在脚本开始时预加载了默认值,因此如果在 xbo 中没有找到该键,则在 xbo_prev 中会找到一个默认值(通常为 0),即有效的。如果当前字典中不存在上一个键,我需要能够获取它,因为某些钻孔依赖于上一行中已经设置的参数。例如:
  • XBO X=100 Y=200 Z=10
  • XBO X=100 Y=100 ,Z 被省略,因为它应该与之前的钻孔具有相同的值。但是,woodWOP 系统需要每个单独钻孔的所有已知值。

标签: python cnc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    if not 'Y' in xbo: 
        xbo['Y']=xbo_prev['Y']
    print >>woodWOPfile, 'YA="%s"' %xbo['Y']
    

    为什么不检查它是否在那里并首先设置它。

    【讨论】:

    • 对于dict.setdefault 所做的事情,这似乎是一种冗长的方式。
    • @juanchopanza 我同意我喜欢 setdefault 我刚学会的谢谢!!
    【解决方案3】:

    现有的两个答案也可以,但是如果您知道xbo_prev 将有您的关键,那么另一种选择是利用.get()default 参数:

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

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

    【讨论】:

    • 谢谢。这是一个更适合我程序的另一部分的解决方案!
    • 你不需要 or with get: xbo.get('Y', xbo_prev['Y'])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2018-07-14
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多