2012-07-17 7 views
24

Estoy usando Python's ConfigParser para crear un archivo de configuración. Quiero verificar si una sección tiene una opción particular definida y, si lo hace, obtener el valor. Si la opción no está definida, solo quiero continuar sin ningún comportamiento especial. Parece que hay dos formas de hacer esto.Python ConfigParser: Comprobando la existencia de la opción

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

O:

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

es un método preferido sobre el otro? El if implica menos líneas, pero de vez en cuando he leído que try/except se considera más pitónico en muchos casos.

Respuesta

22

La elección entre try/except y if-condition es una línea difusa.

  1. Si usted espera que la excepción sea bastante raro, usar try/excepto como más de cerca los modelos de pensamiento
  2. Por el contrario, "espera" excepciones como un elemento de configuración que faltan, son parte del flujo normal de control y el código debe reflejar eso.

No hay una opción claramente superior, pero parece que tienes una caja de (2) por lo que optaría por si/then. Esto ignora por completo los aspectos de Más fácil para pedir perdón que el permiso y las eficiencias relativas de las estructuras.

+0

Eso tiene sentido. Me quedaré con el método 'if'. Me gustaría saber si una forma es más rápida que la otra. El método 'if' llama al objeto ConfigParser dos veces, donde el método' try' solo lo hace una vez. No sé si eso podría tener un impacto. – user1272534

Cuestiones relacionadas