web-dev-qa-db-ja.com

指定されていない場合、argparse store false

parser.add_argument('-auto', action='store_true')

-autoは指定されていませんか?この方法では、指定されていない場合はNoneが格納されることをかすかに覚えています。

78
siamii

store_trueオプションは、デフォルト値Falseを自動的に作成します。

同様に、store_falseは、コマンドライン引数が存在しない場合、デフォルトでTrueになります。

この動作のソースは簡潔かつ明確です: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

Argparse docsはこの件に関して明確ではないので、今すぐ更新します: http://hg.python.org/cpython/rev/49677cc6d83a

134

import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)

ランニング

% test.py

利回り

Namespace(auto=False)

そのため、デフォルトではFalseを保存しているようです。

9
unutbu

レイモンド・ヘッティンガーはすでにOPの質問に答えています。

ただし、私のグループでは、「store_false」を使用した可読性の問題が発生しています。特に新しいメンバーがグループに参加するとき。これは、ユーザーが引数を指定すると、その引数に対応する値がTrueまたは1になるという考え方が最も直感的な方法だからです。

たとえば、コードが-

parser.add_argument('--stop_logging', action='store_false')

コードリーダーは、stop_loggingの値がtrueの場合、ロギングステートメントがオフになることを期待する可能性があります。しかし、次のようなコードは、目的の動作の反対につながります-

if not stop_logging:
    #log

一方、インターフェースが次のように定義されている場合、「if-statement」は機能し、読みやすくなります-

parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log
0
MonsieurBeilto