2016-04-08 10 views
2

this questionによると、私が入力したときに「parse_fail.py」と呼ばれるこのスクリプトはデフォルト= 1を印刷する必要があります。何故なの?なぜ私のargparseはデフォルト値を表示しないのですか?コマンドラインで</p> <pre><code>python parse_fail.py --help </code></pre> <p>が、それはしていません:

#parse_fail.py 

import argparse 
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) 
parser.add_argument("--test", type=int, dest='test', default=1) 
parser.parse_args() 
args_dict = vars(parser.parse_args()) 
locals().update(args_dict) 
print test 

私はこのスクリプトを実行すると、私が手:

$ python parser_fail.py --help 
usage: parser_fail.py [-h] [--test TEST] 

optional arguments: 
    -h, --help show this help message and exit 
    --test TEST 

EDIT:スクリプトの追加出力を。

+0

それは何をしますか? – hpaulj

答えて

3

明らかに空でないヘルプ文字列を含める必要があります。

これは動作します:

import argparse 
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) 
parser.add_argument("--test", type=int, dest='test', help="WHY NO DEFAULT???", default=1) 
parser.parse_args() 
args_dict = vars(parser.parse_args()) 
locals().update(args_dict) 
print test 



$ python parser_fail.py -h 
usage: parser_fail.py [-h] [--test TEST] 

optional arguments: 
    -h, --help show this help message and exit 
    --test TEST WHY NO DEFAULT??? (default: 1) 
1

変数testを定義していないため、結果が得られません。代わりにエラーメッセージが表示されます。これは実際にあなたにこれを伝えます。あなたのコードにtestを定義するものは何もないので、それを印刷しようとするとエラーになります。

あなたは2つの間違いを犯しています。まず、返り値parser.parse_args()を投げ捨てます。これはコマンドライン引数の値が格納されている場所です。これを修正するには、それをいくつかの変数に割り当てます。

args = parser.parse_args() 

第二に、あなたはtestとないtestargsの属性(またはものは何でもあなたが使用する変数)を印刷しようとしています。これを修正するには、testではなくargs.testを印刷してください。

print args.test 

あなたtest属性の値でのみ興味があるので、あなたはこれらを組み合わせることができ(もちろん、あなたは通常、1つの引数の値以上のものを使用したいと思うでしょうので、あなたはおそらくないだろう、が、実際のスクリプトでは、この):

print parser.parse_args().test 

一緒にそれを置く、これは動作します:

import argparse 
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) 
parser.add_argument("--test", type=int, dest='test', default=1) 
print parser.parse_args().test 

あなたは、あなたが与えたリンクからポストコードを得た方法(私は本当にWH、把握することはできませんヘルプメッセージにデフォルト値を含めていますが、うまくいけば助かります)。

+0

そのフォーマッタクラスでは、ヘルプメッセージにデフォルトが表示されますが、彼はそれを私たちに示していません。 – hpaulj

関連する問題

 関連する問題