argparseが指定されていない場合はfalse


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

-autoが指定されていない場合、どのようにfalseを格納できますか?この方法では、指定されていない場合はNoneが格納されます。

回答:


171

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

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

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

argparseのドキュメントは件名が明確でないため、ここで更新します。http//hg.python.org/cpython/rev/49677cc6d83a


2
これに関するいくつかのコメント。まず、オプションがの場合、hg.python.org/cpython/rev/49677cc6d83aに基づいて-bardestが自動的にに設定されるようです。ただし、このデフォルトの動作がコードのどこに設定されているかはわかりません。引数は常に明示的に設定しました。また、私はさせると思うにデフォルトのためならば、本当に意味がないオプションです。このケースではないはずですか?bardestbardest--bar--barstore_falsedestnotbar
Faheem Mitha

4
私は逆張りの命名規則を理解していませんでした。
brainLoop

私は同意します、これは少し混乱します。とにかく、 'store_false'または 'store_true'はデフォルト値ではなくアクションとして指定されています。したがって、この引数をプログラムに追加すると、指定されたアクションがトリガーされます。
ADY

15

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

ランニング

% test.py

収量

Namespace(auto=False)

したがってFalse、デフォルトで格納されているようです。


3

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

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

たとえば、コードが-

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

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

if not stop_logging:
    #log

一方、インターフェースが次のように定義されている場合、「ifステートメント」が機能し、より直感的に読むことができます-

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

7
宛先エイリアスを設定すると、読みやすくなりますparser.add_argument('--stop_logging', action='store_false', dest='use_logging')
Krassi

-4

store_falseは実際にはデフォルトでデフォルトになり0ます(テストして確認できます)。デフォルトを変更するdefault=Trueには、宣言に追加します。

したがって、この場合: parser.add_argument('-auto', action='store_true', default=True)


これは、Python 2.7と3.4でのケースのように表示されません: >>> parser.add_argument('--bar', action='store_false') _StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None) >>> parser.parse_args([]) Namespace(bar=True)
Leynos

2
申し訳ありませんが、これは実際にはoptparseのデフォルトの動作です。argparseはデフォルトでストアの逆になります。つまり、「store_false」のデフォルトは「True」です。
Unix-Ninja
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.