ConfigParser DuplicateOptionError με HTTP_PROXY και http_proxy
Κατανοήστε γιατί τα HTTP_PROXY και http_proxy μπορούν να συνυπάρχουν σε περιβάλλον Linux και παρόλα αυτά να προκαλούν DuplicateOptionError όταν χρησιμοποιούνται ως προεπιλογές του ConfigParser.
Σε περιβάλλον που διακρίνει πεζά και κεφαλαία, τα HTTP_PROXY και http_proxy μπορεί να είναι διαφορετικά ονόματα. Το ConfigParser συνήθως μετατρέπει τα ονόματα επιλογών σε πεζά, οπότε η ταυτόχρονη τροφοδοσία τους στις προεπιλογές μπορεί να τα κάνει μία διπλή επιλογή.
Ένα σφάλμα που αναφέρει <dict> μπορεί επομένως να προέρχεται από το ConfigParser(defaults=os.environ), πριν καν επιχειρηθεί οποιαδήποτε σύνδεση μέσω διακομιστή μεσολάβησης.
Αν η εφαρμογή χρειάζεται σκόπιμα ονόματα περιβάλλοντος με διάκριση πεζών-κεφαλαίων σε αυτόν τον αναλυτή, ορίστε την πολιτική κανονικοποίησης πριν τα φορτώσετε:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Έτσι οι δύο γραφές μένουν ξεχωριστές. Οι αναζητήσεις και κάθε ρύθμιση που διαβάζεται στη συνέχεια ακολουθούν πλέον αυτή την πολιτική. Η απενεργοποίηση της παρεμβολής εμποδίζει επίσης τα σύμβολα τοις εκατό στις τιμές περιβάλλοντος να αντιμετωπίζονται ως σύνταξη παρεμβολής.
Αν η εφαρμογή απαιτεί ρύθμιση χωρίς διάκριση πεζών-κεφαλαίων, επιλέξτε ρητά τις επιθυμητές εισόδους περιβάλλοντος και επιλύστε τις αντικρουόμενες γραφές σύμφωνα με τους κανόνες διακομιστή μεσολάβησης εκείνου του πελάτη πριν τις δώσετε στον αναλυτή.
Η αλλαγή του strict=False δέχεται διπλότυπα, αλλά δεν καθορίζει ποια αντικρουόμενη τιμή διακομιστή μεσολάβησης πρέπει να χρησιμοποιήσει η εφαρμογή. Η αφαίρεση μιας τυχαίας γραφής περιβάλλοντος μπορεί να είναι σκόπιμη όταν δεν ελέγχετε τον αναλυτή· πρώτα προσδιορίστε ποια τιμή χρειάζεται ο πελάτης προς τα κάτω.