2012-07-17 194 views
24

我正在使用Python的ConfigParser創建配置文件。我想檢查一個部分是否有定義的特定選項,如果是,則獲取該值。如果該選項沒有定義,我只想繼續沒有任何特殊行爲。似乎有兩種方法可以做到這一點。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。

回答

22

try/except和if-condition之間的選擇是模糊線。

  1. 如果你期望的例外是相當罕見的,使用try /除外,因爲它更接近地模擬思維
  2. 相反,「預期」之類的配置項的異常缺失,是控制的正常流程的一部分,代碼應該反映這一點。

有沒有明確的優越選擇,但它聽起來像你有(2)的情況下,所以我會選擇如果/然後。這完全忽略了比容許更容易要求寬恕和結構的相對效率的方面。

+0

這很有道理。我會堅持'if'方法。我會很想知道一種方式是否比另一種更快。 'if'方法兩次調用ConfigParser對象,'try'方法只做一次。我不知道這是否會產生影響。 – user1272534 2012-07-17 18:59:26