DuplicateOptionError v ConfigParser s HTTP_PROXY a http_proxy
Pochopte, prečo môžu HTTP_PROXY a http_proxy v Linuxe existovať vedľa seba, a napriek tomu vyvolať DuplicateOptionError, keď ich použijete ako predvolené hodnoty ConfigParseru.
V prostredí, ktoré rozlišuje veľkosť písmen, môžu byť HTTP_PROXY a http_proxy odlišné názvy. ConfigParser zvyčajne prevádza názvy volieb na malé písmená, takže ich spoločné zadanie do predvolených hodnôt z nich môže urobiť jednu duplicitnú voľbu.
Chyba spomínajúca <dict> teda môže vzniknúť z ConfigParser(defaults=os.environ) ešte predtým, než sa aplikácia pokúsi o akékoľvek pripojenie cez proxy.
Ak aplikácia v tomto parseri zámerne potrebuje názvy prostredia citlivé na veľkosť písmen, nastavte zásadu normalizácie ešte pred ich načítaním:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Tým zostanú oba prepisy oddelené. Vyhľadávania aj akákoľvek neskôr načítaná konfigurácia teraz tiež dodržiavajú túto zásadu. Vypnutie interpolácie tiež zabráni tomu, aby sa znaky percent v hodnotách prostredia považovali za syntax interpolácie.
Ak aplikácia vyžaduje konfiguráciu nerozlišujúcu veľkosť písmen, vyberte zamýšľané vstupy prostredia výslovne a rozporuplné prepisy vyriešte podľa pravidiel proxy daného klienta, než ich odovzdáte parseru.
Zmena strict=False duplikáty prijíma, ale neurčuje, ktorú z rozporuplných hodnôt proxy má aplikácia použiť. Odstránenie jedného náhodného prepisu môže byť vhodné, keď parser neovládate; najprv zistite, ktorú hodnotu potrebuje klientska časť.