python 2.7

时间:2016-06-21 06:54:46

标签: python python-2.7 configparser

ConfigParserSafeConfigParser之间有什么区别?那么,为什么后者更安全呢? ConfigParser有什么“不安全”?我知道SafeConfigParser继承了ConfigParser,它有什么不同?

3 个答案:

答案 0 :(得分:8)

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节中的值的格式字符串。可以在初始化时提供其他默认值。

更新

我刚刚检查了SafeConfigParser中的source code,即使确实ConfigParser也允许插值,SafeConfigParser仍提供了{{ 3}}将其描述为更神奇,更可预测的魔术插值功能

例如,如果引用错误或'%'字符后出现语法错误,它将引发InterpolationSyntaxError

更新2

这对于精确描述SafeConfigParserdocumentation可能很有用。如果您不确定应该在python 2.7中使用SafeConfigParser还是ConfigParser中的哪个,请使用第一个(除非您有非常特定的理由使用第二个)

您还可以通过执行以下操作,简化将来向python 3+(has been renamed to ConfigParser in Python 3.2)的过渡:

from ConfigParser import SafeConfigParser as ConfigParser

答案 1 :(得分:1)

SafeConfigParser是...

  

ConfigParser的派生类,该类实现了   魔术插值功能的更健全的变体。这个   实施也更可预测。新的应用程序应该   如果他们不需要与较早版本兼容,则更喜欢此版本   版本的Python。

我认为SafeConfigParser似乎没有考虑Python版本的兼容性。 ConfigParser在Python 3版本中也存在,但是SafeConfigParser不存在。确实,SafeConfigParser被重命名为ConfigParserConfigParser3.2中被删除了。参见此question

因此,我认为ConfigParserSafeConfigParser之间的区别在于可用性和版本兼容性。

更新:

SafeConfigParserConfigParser安全。这并不是说ConfigParser是不安全的。我试图找出更安全的方法。它支持magical interpolation的更合理的变体,并且比ConfigParser更严格。

那为什么SafeConfigParser是安全的?

答案是SafeConfigParser更严格。严格的示例在@ olinox14答案中。

SafeConfigParser已成为Python 3中的默认ConfigParser这一事实并不一定意味着您需要将它们分开。

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

答案 2 :(得分:0)

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

除了核心功能之外,SafeConfigParser还支持插值。这意味着值可以包含引用同一节中其他值的格式字符串,或特殊DEFAULT节中的值。初始化时可以提供其他默认值。