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 ยอมรับรายการซ้ำ แต่ไม่ได้กำหนดว่าแอปพลิเคชันควรใช้ค่าพร็อกซีที่ขัดแย้งค่าใด การลบการสะกดสภาพแวดล้อมที่เกิดขึ้นโดยไม่ตั้งใจอาจเหมาะสมเมื่อคุณไม่ได้ควบคุมตัวแยกวิเคราะห์ ขั้นแรกให้ระบุว่าค่าที่ไคลเอนต์ปลายทางต้องการคือค่าใด