web-dev-qa-db-ja.com

ConfigParser VS SafeConfigParser in python 2.7

ConfigParserSafeConfigParserの違いは何ですか?そして、なぜ、正確には、後者がより安全なのですか? ConfigParserの「安全でない」とは何ですか? SafeConfigParserConfigParserを継承したことは知っていますが、何が違うのでしょうか。

15
Ticks

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)

From documentation補間もサポートします。つまり、値には、同じセクション内の他の値、または特別なDEFAULTセクション内の値を参照するフォーマット文字列を含めることができます。初期化時に追加のデフォルトを提供できます。

更新

SafeConfigParserソースコード を確認しました。ConfigParserでも補間が許可されている場合でも、SafeConfigParserは、 ドキュメント魔法の補間機能のより正気でより予測可能なバリアント

たとえば、 '%'文字の後に不正な参照または構文エラーが発生した場合、InterpolationSyntaxErrorが発生します。

アップデート2

これは、SafeConfigParserクラス Python 3.2 でConfigParserに名前が変更されました。SafeConfigParserまたはConfigParserのどちらを使用する必要があるか疑問がある場合は= python 2.7、最初のものを使用します(2番目のものを使用する特別な理由がない限り)

また、次のようにすることで、python 3 +、( まもなく発生するはずです )への将来の移行を容易にすることもできます。

from ConfigParser import SafeConfigParser as ConfigParser
9
olinox14

SafeConfigParserは...

魔法の補間機能のより健全なバリアントを実装するConfigParserの派生クラス。この実装もより予測可能です。新しいアプリケーションは、古いバージョンのPythonと互換性がある必要がない場合は、このバージョンを優先する必要があります。

SafeConfigParserはPythonバージョンの互換性を考慮していないようです。ConfigParserはPython 3バージョンにも存在しますが、SafeConfigParserは存在しません。正確にはSafeConfigParserConfigParserに名前が変更され、ConfigParser3.2で削除されます。これを参照してください 質問 =。

したがって、ConfigParserSafeConfigParserの違いは、使いやすさとバージョンの互換性だと思います。

更新:

SafeConfigParserConfigParserよりも安全です。 ConfigParserが安全ではないというわけではありません。私は何がより安全かを理解しようとしました。 魔法の補間 のより健全なバリアントをサポートし、ConfigParserよりも厳密です。

では、なぜSafeConfigParserが安全なのですか?

答えはSafeConfigParserがより厳密です。 strictの例は@ olinox14の回答にあります。

Python 3)でSafeConfigParserがデフォルトのConfigParserになったという事実は、必ずしもそれらを分離する必要があることを意味するわけではありません。

最終的に、SafeConfigParserはより厳密です。また、SafeConfigParserを使用することをお勧めします。

1
Yongjin Jo

https://docs.python.org/2/library/configparser.html によると:

コア機能に加えて、SafeConfigParserは補間をサポートします。つまり、値には、同じセクション内の他の値、または特別なDEFAULTセクション内の値を参照するフォーマット文字列を含めることができます。初期化時に追加のデフォルトを提供できます。

0
Clownbaby