31

我正在使用 Python 的 ConfigParser 创建配置文件。我想检查一个部分是否定义了特定的选项,如果有,则获取该值。如果未定义该选项,我只想继续没有任何特殊行为。似乎有两种方法可以做到这一点。

if config.has_option('Options', 'myoption'):
    OPTION = config.get('Options', 'myoption')

或者:

try:
    OPTION = config.get('Options', 'myoption')
except ConfigParser.NoOptionError:
    pass

一种方法优于另一种方法吗?涉及的if行数较少,但我偶尔会读到try/except在许多情况下被认为更 Pythonic。

4

1 回答 1

28

try/except 和 if-condition 之间的选择是一条模糊的线。

  1. 如果您希望异常很少见,请使用 try/except,因为它更接近于模拟思维
  2. 相反,像缺少配置项这样的“预期”异常是正常控制流程的一部分,代码应该反映这一点。

没有明显更好的选择,但听起来你有一个案例(2),所以我会选择 if/then。这完全忽略了更容易请求宽恕而不是许可的方面以及结构的相对效率。

于 2012-07-17T17:52:11.643 回答