parser.add_argument('-auto', action='store_true')
-auto
は指定されていませんか?この方法では、指定されていない場合はNoneが格納されることをかすかに覚えています。
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
と
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)
ランニング
% test.py
利回り
Namespace(auto=False)
そのため、デフォルトではFalse
を保存しているようです。
レイモンド・ヘッティンガーはすでに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