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)
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
SafeConfigParser
は...
魔法の補間機能のより健全なバリアントを実装するConfigParserの派生クラス。この実装もより予測可能です。新しいアプリケーションは、古いバージョンのPythonと互換性がある必要がない場合は、このバージョンを優先する必要があります。
SafeConfigParser
はPythonバージョンの互換性を考慮していないようです。ConfigParser
はPython 3バージョンにも存在しますが、SafeConfigParser
は存在しません。正確にはSafeConfigParser
はConfigParser
に名前が変更され、ConfigParser
は3.2
で削除されます。これを参照してください 質問 =。
したがって、ConfigParser
とSafeConfigParser
の違いは、使いやすさとバージョンの互換性だと思います。
更新:
SafeConfigParser
はConfigParser
よりも安全です。 ConfigParser
が安全ではないというわけではありません。私は何がより安全かを理解しようとしました。 魔法の補間 のより健全なバリアントをサポートし、ConfigParser
よりも厳密です。
では、なぜSafeConfigParserが安全なのですか?
答えはSafeConfigParser
がより厳密です。 strictの例は@ olinox14の回答にあります。
Python 3)でSafeConfigParser
がデフォルトのConfigParser
になったという事実は、必ずしもそれらを分離する必要があることを意味するわけではありません。
最終的に、SafeConfigParser
はより厳密です。また、SafeConfigParserを使用することをお勧めします。
https://docs.python.org/2/library/configparser.html によると:
コア機能に加えて、SafeConfigParserは補間をサポートします。つまり、値には、同じセクション内の他の値、または特別なDEFAULTセクション内の値を参照するフォーマット文字列を含めることができます。初期化時に追加のデフォルトを提供できます。