2012-07-17 9 views
24

Używam Python's ConfigParser do utworzenia pliku konfiguracyjnego. Chcę sprawdzić, czy sekcja ma określoną opcję, a jeśli tak, to uzyskać wartość. Jeśli opcja nie jest zdefiniowana, po prostu chcę kontynuować bez żadnego specjalnego zachowania. Wydaje się, że są na to dwa sposoby.Python ConfigParser: Sprawdzanie istnienia opcji

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

Lub:

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

jest jedną z metod preferowane nad innymi? Numer if zawiera mniej wierszy, ale od czasu do czasu czytałem, że w wielu przypadkach jest to bardziej python.

Odpowiedz

22

Do wyboru między try/except i if-condition jest linia rozmyta.

  1. Jeśli oczekujesz wyjątek być dość rzadka, należy spróbować/z wyjątkiem, jak to dokładniej modele myślenia
  2. Odwrotnie, „oczekiwać” wyjątki takie jak element konfiguracji brakuje, są częścią normalnego przepływu sterowania i kod powinien to odzwierciedlać.

Nie ma wyraźnie lepszego wyboru, ale wygląda na to, że masz przypadek (2), więc zdecyduję, czy/wtedy. To całkowicie ignoruje aspekty Łatwiejsze, by prosić o przebaczenie niż zezwolenie i względną efektywność struktur.

+0

To ma sens. Będę trzymać się metody 'if'. Byłbym ciekawy, czy jeden sposób jest szybszy od drugiego. Metoda 'if' wywołuje obiekt ConfigParser dwukrotnie, gdzie metoda' try' robi to tylko raz. Nie wiem, czy to może mieć wpływ. – user1272534

Powiązane problemy