DuplicateOptionError w ConfigParser z HTTP_PROXY i http_proxy
Zrozum, dlaczego HTTP_PROXY i http_proxy mogą współistnieć w systemie Linux, a mimo to powodować DuplicateOptionError, gdy służą jako wartości domyślne ConfigParser.
W środowisku rozróżniającym wielkość liter HTTP_PROXY i http_proxy mogą być różnymi nazwami. ConfigParser zwykle zamienia nazwy opcji na małe litery, więc podanie obu w wartościach domyślnych może zamienić je w jedną zduplikowaną opcję.
Błąd wymieniający <dict> może więc pochodzić z ConfigParser(defaults=os.environ) jeszcze przed podjęciem jakiejkolwiek próby połączenia przez proxy.
Jeśli aplikacja w tym parserze celowo potrzebuje nazw środowiska rozróżniających wielkość liter, ustaw politykę normalizacji przed ich wczytaniem:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Dzięki temu obie pisownie pozostają rozdzielone. Wyszukiwania i każda później odczytana konfiguracja również podlegają tej polityce. Wyłączenie interpolacji zapobiega też traktowaniu znaków procentu w wartościach środowiska jako składni interpolacji.
Jeśli aplikacja wymaga konfiguracji niewrażliwej na wielkość liter, wybierz zamierzone zmienne środowiskowe jawnie i rozstrzygnij sprzeczne pisownie zgodnie z regułami proxy tego klienta, zanim przekażesz je do parsera.
Zmiana strict=False akceptuje duplikaty, ale nie określa, którą sprzeczną wartość proxy aplikacja ma stosować. Usunięcie jednej przypadkowej pisowni może być właściwe, gdy nie kontrolujesz parsera; najpierw ustal, jakiej wartości potrzebuje klient niższego poziomu.