我正在编写一个 Python 3 脚本,用于对林业木材数量进行制表。
工作人员会将他们标记的每棵树的树种、直径和高度通过无线电广播给计算机操作员。然后计算机操作员将输入如下命令:
OAK 14 2
这表示程序应该增加直径为 14 英寸、高度为两根原木的橡树的数量。
然而,工人们有时也一次调用不止一棵相同类型的树。所以程序也必须能够处理这个命令:
OAK 16 1 2
这意味着我们将计数增加了两个。
因此,我设置解析器的方式是:
key=cmdtup[0]+"_"+cmdtup[1]+"_"+cmdtup[2]
try:
trees[key]=int(trees[key])+int(cmdtup[3])
except KeyError:
trees[key]=int(cmdtup[3])
except IndexError:
trees[key]=int(trees[key])+1
如果程序被命令存储它以前没有存储的树,KeyError 将发出,并且处理程序将设置 dict 条目而不是增加它。如果省略第三个参数,则会引发 IndexError,并且处理程序会将其视为第三个参数为 1。
但是,如果我们同时处于这两种情况,就会出现问题。程序还没有听说过橡树,操作员也没有指定计数。KeyError 熄灭,但随后会生成自己的 IndexError,并且 Python 不喜欢在异常处理程序中发生异常时使用它。
我想最简单的方法是简单地删除一个或另一个 except 并以另一种方式完成其功能。不过,我想知道是否有更优雅的 Pythonic 方式来实现它。在那儿?