什么是ConfigParser
和SafeConfigParser
之间的区别是什么?为什么,究竟是后者更安全?什么是“不安全”的有关ConfigParser
?我知道SafeConfigParser
继承了ConfigParser
,那有什么做不同?
如果SafeConfigParser不是字符串的set(section, option, value)
实现不同NoSectionError方法,如果节不存在,这将提高一个TypeError
和value
。
这使得在分析器,从文档的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 code的SafeConfigParser
,即使这是真的,ConfigParser
还可以插值,SafeConfigParser
提供它的一个更新版本documentation描述为神奇的插值功能的更理智,更可预见的变体。
例如,它会在“%”字符后抬起不好引用或语法错误的事件的InterpolationSyntaxError
。
更新2
这可能是有用的,准确的SafeConfigParser
类has been renamed to ConfigParser in Python 3.2。如果你想知道其中SafeConfigParser
或ConfigParser
的,你应该在Python 2.7使用,使用前(除非你有一个非常特殊的原因需要使用第二)
您也可以对蟒蛇做更方便你的未来过渡3+,(which should happen soon):
from ConfigParser import SafeConfigParser as ConfigParser
SafeConfigParser
是...
派生类ConfigParser的实现了神奇的功能,插一个更健全的变种。这个实现更具可预测性为好。新的应用程序应该比较喜欢这个版本,如果他们不需要与旧版本的Python兼容。
我认为SafeConfigParser
似乎并没有考虑Python版本的兼容性。 ConfigParser
也存在在Python 3版本,但SafeConfigParser
不存在。没错,SafeConfigParser
更名为ConfigParser
和ConfigParser
在3.2
被删除。看到这个question。
所以我觉得ConfigParser
和SafeConfigParser
之间的差异是可用性和版本的兼容性。
更新:
SafeConfigParser
只比ConfigParser
安全。这并不是说ConfigParser
是不是安全。我试图弄清楚什么是安全的。它支持magical interpolation的更理智的变种,它是比ConfigParser
更加严格。
那么,为什么SafeConfigParser是安全的?
答案是SafeConfigParser
更为严格。严格的例子是@ olinox14答案。
事实上,SafeConfigParser
已成为在Python 3默认ConfigParser
并不一定意味着你需要将它们分开。
最终,SafeConfigParser
更为严格。并建议使用SafeConfigParser。
据https://docs.python.org/2/library/configparser.html:
在核心功能之上,SafeConfigParser支持插值。这意味着值可以包含在一个特殊的DEFAULT部格式字符串其是指其他的值在相同的部分,或值。附加缺省值可以被设置在初始化。