2017-01-23 7 views
1

同じタイプの複数のコマンドライン引数を受け取り、処理のためにforループに送り込むスクリプトを作成しようとしています。私のコードで:forループを与えるためにparser_args値を使用する(Python 3.6)

TypeError: 'Namespace' object is not iterable 

リストにそれらを有効にする方法はあり:

import argparse 

parser = argparse.ArgumentParser(description='XYZ') 
parser.add_argument('[values]', nargs='+', help='A list of values') 

u = parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

for values in u: 
    ... # do a bunch of stuff for each "value" 

私はparse_argsに格納された値は、それゆえ私は自分のコードを実行すると、以下のエラーがNAMESPACEされることを理解しますオブジェクト?私はforループにそれらを渡すことができるように、または私が使用すべき他のアプローチはありますか?ちょうどPythonを始めるので、あらかじめ謝罪の質問がある場合は

+0

どのようなタイプの値を反復しますか? –

答えて

2

u.valuesadd_argument呼び出しで指定された引数名)ではなく、uを繰り返してください。あなたは[values]valuesに名前を変更する必要があることを行うには:クラスargparse.namespaceのオブジェクトを簡単にしている解析から

import argparse 

parser = argparse.ArgumentParser(description='XYZ') 
parser.add_argument('values', nargs='+', help='A list of values') 
#     ^^^^^^^^ 

u = parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

for value in u.values: 
    #  ^^^^^^^^ 
    # do a bunch of stuff for each "value" 
+0

他の誰かがこの質問に遭遇した場合の注意点ですが、この質問はpython3.xというタグがついています(とpython3.6を挙げています)。この解決策はpython2.7 + –

0

値(カスタマイズすることができます - ドキュメントを参照してください)。

通常、これらの値には属性名(例: args.foo。珍しい名前の場合、多くはgetattr(args, '[values]')を使用する必要があります。

単純な場合、引数の値は単一の文字列または数値です。 '*'や '+'のようなnargsの場合、値はリストになります。 appendアクションタイプでは、リスト内でリストを取得することさえできます。

args名前空間を印刷することをお勧めします。あなたの「DEST」で

In [2]: parser = argparse.ArgumentParser(description='XYZ') 
    ...: parser.add_argument('[values]', nargs='+', help='A list of values').... 
In [3]: args =parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

In [4]: print(args) 
Namespace([values]=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

私はargsから文字列のリストを取得するためにgetattrを使用する必要があります。あなたは、属性を追加したり、既存のものを修正することができるように

In [5]: getattr(args,'[values]') 
Out[5]: ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 

argsは、単純なオブジェクトです。例えば

In [6]: args.values = ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 
In [7]: print(args) 
Namespace([values]=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'], 
    values=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

あなたが辞書に精通している場合は、vars()を使用することができます。

In [9]: vars(args)['values'] 
Out[9]: ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 

は、この種のものPythonの対話セッションで遊んでみてください。

関連する問題