ConfigParser VS SafeConfigParser在Python 2.7

问题描述 投票:12回答:3

什么是ConfigParserSafeConfigParser之间的区别是什么?为什么,究竟是后者更安全?什么是“不安全”的有关ConfigParser?我知道SafeConfigParser继承了ConfigParser,那有什么做不同?

python python-2.7 configparser
3个回答
9
投票

如果SafeConfigParser不是字符串的set(section, option, value)实现不同NoSectionError方法,如果节不存在,这将提高一个TypeErrorvalue

这使得在分析器,从文档的example的行为更多的控制:

try:
    config.set(section2, option, config.get(section1, option, 1))
except ConfigParser.NoSectionError:
    # Create non-existent section
    config.add_section(section2)
    opt_move(config, section1, section2, option)
else:
    config.remove_option(section1, option)

documentation:它还支持插值。这意味着值可以包含在一个特殊的DEFAULT部格式字符串其是指其他的值在相同的部分,或值。附加缺省值可以被设置在初始化。

更新

我刚刚检查了source codeSafeConfigParser,即使这是真的,ConfigParser还可以插值,SafeConfigParser提供它的一个更新版本documentation描述为神奇的插值功能的更理智,更可预见的变体。

例如,它会在“%”字符后抬起不好引用或语法错误的事件的InterpolationSyntaxError

更新2

这可能是有用的,准确的SafeConfigParserhas been renamed to ConfigParser in Python 3.2。如果你想知道其中SafeConfigParserConfigParser的,你应该在Python 2.7使用,使用前(除非你有一个非常特殊的原因需要使用第二)

您也可以对蟒蛇做更方便你的未来过渡3+,(which should happen soon):

from ConfigParser import SafeConfigParser as ConfigParser

1
投票

SafeConfigParser是...

派生类ConfigParser的实现了神奇的功能,插一个更健全的变种。这个实现更具可预测性为好。新的应用程序应该比较喜欢这个版本,如果他们不需要与旧版本的Python兼容。

我认为SafeConfigParser似乎并没有考虑Python版本的兼容性。 ConfigParser也存在在Python 3版本,但SafeConfigParser不存在。没错,SafeConfigParser更名为ConfigParserConfigParser3.2被删除。看到这个question

所以我觉得ConfigParserSafeConfigParser之间的差异是可用性和版本的兼容性。

更新:

SafeConfigParser只比ConfigParser安全。这并不是说ConfigParser是不是安全。我试图弄清楚什么是安全的。它支持magical interpolation的更理智的变种,它是比ConfigParser更加严格。

那么,为什么SafeConfigParser是安全的?

答案是SafeConfigParser更为严格。严格的例子是@ olinox14答案。

事实上,SafeConfigParser已成为在Python 3默认ConfigParser并不一定意味着你需要将它们分开。

最终,SafeConfigParser更为严格。并建议使用SafeConfigParser。


0
投票

https://docs.python.org/2/library/configparser.html

在核心功能之上,SafeConfigParser支持插值。这意味着值可以包含在一个特殊的DEFAULT部格式字符串其是指其他的值在相同的部分,或值。附加缺省值可以被设置在初始化。

© www.soinside.com 2019 - 2024. All rights reserved.