web-dev-qa-db-fra.com

Python ConfigParser: Vérification de l'existence d'une option

J'utilise ConfigParser de Python pour créer un fichier de configuration. Je veux vérifier si une section a une option particulière définie et, si c'est le cas, obtenir la valeur. Si l'option n'est pas définie, je veux juste continuer sans aucun comportement particulier. Il semble y avoir deux façons de procéder.

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

Ou:

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

Une méthode est-elle préférée à l'autre? Le if implique moins de lignes, mais j'ai parfois lu que try/except est considéré comme plus pythonique dans de nombreux cas.

30
user1272534

Le choix entre try/except et if-condition est une ligne floue.

  1. Si vous vous attendez à ce que l'exception soit assez rare, utilisez try/except car elle modélise de plus près la réflexion
  2. Inversement, les exceptions "attendues" comme un élément de configuration manquant, font partie du flux normal de contrôle et le code doit refléter cela.

Il n'y a pas de choix clairement supérieur, mais il semble que vous ayez un cas de (2), alors j'opterais pour si/alors. Cela ignore complètement les aspects de plus facile à demander pardon que la permission et l'efficacité relative des structures.

28
msw