خطای ConfigParser DuplicateOptionError با HTTP_PROXY و http_proxy
درک کنید چرا HTTP_PROXY و http_proxy میتوانند در محیط Linux همزمان وجود داشته باشند و با این حال هنگام استفاده بهعنوان پیشفرضهای ConfigParser خطای DuplicateOptionError بدهند.
در محیطی که به بزرگی و کوچکی حروف حساس است، 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 تکراریها را میپذیرد اما مشخص نمیکند برنامه باید از کدام مقدار پروکسی متناقض استفاده کند. حذف یک املای محیطی تصادفی زمانی که کنترل تجزیهگر در دست شما نیست میتواند مناسب باشد؛ نخست تعیین کنید کلاینت پاییندستی به کدام مقدار نیاز دارد.