DuplicateOptionError v ConfigParser s HTTP_PROXY a http_proxy
Pochopte, proč mohly HTTP_PROXY a http_proxy v Linuxu existovat vedle sebe, a přesto vyvolat DuplicateOptionError, když je použijete jako výchozí hodnoty ConfigParseru.
V prostředí, které rozlišuje velikost písmen, mohou být HTTP_PROXY a http_proxy odlišné názvy. ConfigParser obvykle převádí názvy voleb na malá písmena, takže jejich společné předání do výchozích hodnot z nich může udělat jednu duplicitní volbu.
Chyba zmiňující <dict> tedy může vzniknout z ConfigParser(defaults=os.environ) ještě předtím, než se aplikace pokusí o jakékoli připojení přes proxy.
Pokud aplikace v tomto parseru záměrně potřebuje názvy prostředí citlivé na velikost písmen, nastavte zásadu normalizace ještě před jejich načtením:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Tím zůstanou oba přepisy oddělené. Vyhledávání i jakákoli později načtená konfigurace nyní také dodržují tuto zásadu. Vypnutí interpolace navíc zabrání tomu, aby se znaky procent v hodnotách prostředí považovaly za syntaxi interpolace.
Pokud aplikace vyžaduje konfiguraci nerozlišující velikost písmen, vyberte zamýšlené vstupy prostředí výslovně a rozporuplné přepisy vyřešte podle pravidel proxy daného klienta, než je předáte parseru.
Změna strict=False duplikáty přijímá, ale neurčuje, kterou z rozporuplných hodnot proxy má aplikace použít. Odstranění jednoho náhodného přepisu může být vhodné, když parser neovládáte; nejprve zjistěte, kterou hodnotu potřebuje klientská část.