私はPython 3を使用し、_argparse.ArgumentParser
_をデフォルトで_formatter_class=argparse.RawDescriptionHelpFormatter
_を設定するカスタムクラスでラップします。これは正常に実行できますが、IntelliJ IDEA 2017.1 with Python Plugin(PyCharm))は次のコードに対して警告を表示します:
_class CustomParser(argparse.ArgumentParser):
def __init__(self, formatter_class=argparse.RawDescriptionHelpFormatter, **kwargs):
# noinspection PyArgumentList
super().__init__(formatter_class=formatter_class, **kwargs) # warning in this line for the last argument if suppression comment above removed
_
IntelliJ抑制コマンドでコメントを削除した場合、kwargsでの警告は「ディクショナリが必要です、辞書が表示されました」ですが、機能しています。これは誤検知の警告ですか、それとも警告なしでこれを行うことができますか?この警告の背後に、回避に役立つ実際の問題はありますか?
副次的な質問:使用に違いはありますかformatter_class = kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)
署名で名前付きパラメーターを明示的に定義する代わりに? PEP2 によると、署名でより明示的である方がいいですよね?
はい、それは誤検知のようです。
formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)
について質問しました。しないでください。次の引数として現れるkwargs
の変更は悪いようです。さらに、インポート時の評価と実行時の評価の間には大きな違いがあるため、デフォルトのキーワード引数は、可変データ構造ではなく単純な定数に設定する必要があります。たとえば、 http://www.effbot.org/zone/default-values.htm 。通常のイディオムはformatter_class=None
署名で、次に本文でNoneをテストし、クワルグをあなたの心の内容に変異させます。