ConfigParser DuplicateOptionError với HTTP_PROXY và http_proxy
Hiểu vì sao HTTP_PROXY và http_proxy có thể cùng tồn tại trong môi trường Linux nhưng vẫn gây ra DuplicateOptionError khi được dùng làm giá trị mặc định của ConfigParser.
Trong môi trường phân biệt chữ hoa chữ thường, HTTP_PROXY và http_proxy có thể là hai tên khác nhau. ConfigParser thường chuyển tên tùy chọn thành chữ thường, nên đưa cả hai vào giá trị mặc định có thể gộp chúng thành một tùy chọn trùng lặp.
Do đó, lỗi nêu tên <dict> có thể phát sinh từ ConfigParser(defaults=os.environ) trước cả khi có bất kỳ nỗ lực kết nối proxy nào.
Nếu ứng dụng thực sự cần tên môi trường phân biệt chữ hoa chữ thường trong trình phân tích này, hãy đặt chính sách chuẩn hóa trước khi nạp chúng:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Như vậy hai cách viết vẫn tách biệt. Các tra cứu và mọi cấu hình đọc sau đó cũng tuân theo chính sách này. Việc tắt nội suy cũng ngăn dấu phần trăm trong giá trị môi trường bị coi là cú pháp nội suy.
Nếu ứng dụng cần cấu hình không phân biệt chữ hoa chữ thường, hãy chọn rõ ràng các đầu vào môi trường mong muốn và giải quyết các cách viết xung đột theo quy tắc proxy của ứng dụng khách đó trước khi chuyển cho trình phân tích.
Thay đổi strict=False chấp nhận bản trùng nhưng không xác định giá trị proxy xung đột nào ứng dụng nên dùng. Việc xóa một cách viết môi trường vô tình có thể phù hợp khi bạn không kiểm soát trình phân tích; trước tiên hãy xác định giá trị mà ứng dụng khách hạ nguồn cần.