在区分大小写的环境里,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 改成这样会接受重复项,但并没有规定应用该采用哪一个冲突的代理值。当你无法控制解析器时,删掉一个误加的环境变量写法可能是合适的;先确认下游客户端到底需要哪个值。

相关文章