在Python2.7中,ConfigParser.ConfigParser插入模式%(__name__)s作为节的名称。
在Python3.6(以及3.3)中,除了configparser.ConfigParser之外,InterpolationMissingOptionError在相同的插值中失败。
插补的行为什么时候改变了?这个决定的理由是什么(因为它损害了向后兼容性)?
与如何使用configparser解析器插入节名相反,我是而不是,询问如何在Python3.x中获得这种插值。
发布于 2017-11-11 15:16:43
在python3.2中,旧的ConfigParser类(它实现了__name__插值)被删除,并被以前的SafeConfigParser类所取代。来自什么是新文件
为了提高默认解析器及其支持的INI语法的可用性和可预见性,对syntax解析器模块进行了修改。旧的ConfigParser类被删除,取而代之的是SafeConfigParser,而后者又被重命名为ConfigParser。
详细的动机似乎用这个错误报告来描述
我想总结一下关于
__name__行为的所有奇怪的事情,这是解析器实例的每个部分中都存在的一个特殊键。
__name__密钥。__name__键。add_section()添加时。__name__确实存在,则在parser.options('section')中不可见parser.has_option('section', '__name__') == Trueparser.get('section', '__name__')获得。parser.set('section', '__name__', 'ANY VALUE')更改。parser.remove_option('section', '__name__')删除。parser.set()更改了该值,也不会将其写回带有parser.write()的文件所有这些看起来都是一个特性,在第一次创建的时候并不是特别完整和定义良好。或者说,随着时间的推移,它已经腐烂了,现在没有人使用它了。这样或那样的话,我无法用当前的实现为__name__提供一个有效的用例。它不具有任何内部用途,您真正能够得到它的唯一方法是返回‘节’的parser.get('section', '__name__')。差不多没什么用了。当然,我们可以使用解析器的内部parser._sections数据结构,但这是有害的。
我只想删除在__name__中提到的一个特殊的configparser.py键。在这里,向后兼容性不是一个问题,因为在本例中,我们有一个概念被打破了,以至于您实际上无法使用它。
https://stackoverflow.com/questions/47200088
复制相似问题