web-dev-qa-db-ja.com

IntelliJ Python 3検査は「辞書を期待し、辞書を取得しました」は** kwargsでのスーパーの誤検知ですか?

私は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 によると、署名でより明示的である方がいいですよね?

24
jan

はい、それは誤検知のようです。

formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)について質問しました。しないでください。次の引数として現れるkwargsの変更は悪いようです。さらに、インポート時の評価と実行時の評価の間には大きな違いがあるため、デフォルトのキーワード引数は、可変データ構造ではなく単純な定数に設定する必要があります。たとえば、 http://www.effbot.org/zone/default-values.htm 。通常のイディオムはformatter_class=None署名で、次に本文でNoneをテストし、クワルグをあなたの心の内容に変異させます。

12
J_H