2013-12-19 6 views
6

を使用してコードです。foo.pyが、それはここでエラー</p> <blockquote> <p>ValueError: too many values to unpack</p> </blockquote> <p>でクラッシュし、次のコードです私は./foo.py -hを実行すると-h

#!/usr/bin/python 
import argparse 

parser = argparse.ArgumentParser(description='Find matrices.') 
parser.add_argument('integers', metavar=('n','h'), type=int, nargs=2, help='Dimensions of the matrix') 
(n,h)= parser.parse_args().integers 

コードにバグはありますか?

フル・トレースバック(Pythonの2.7.3):

Traceback (most recent call last): 
    File "argp.py", line 15, in <module> 
    (n,h)= parser.parse_args().integers 
    File "/usr/lib/python2.7/argparse.py", line 1688, in parse_args 
    args, argv = self.parse_known_args(args, namespace) 
    File "/usr/lib/python2.7/argparse.py", line 1720, in parse_known_args 
    namespace, args = self._parse_known_args(args, namespace) 
    File "/usr/lib/python2.7/argparse.py", line 1926, in _parse_known_args 
    start_index = consume_optional(start_index) 
    File "/usr/lib/python2.7/argparse.py", line 1866, in consume_optional 
    take_action(action, args, option_string) 
    File "/usr/lib/python2.7/argparse.py", line 1794, in take_action 
    action(self, namespace, argument_values, option_string) 
    File "/usr/lib/python2.7/argparse.py", line 994, in __call__ 
    parser.print_help() 
    File "/usr/lib/python2.7/argparse.py", line 2313, in print_help 
    self._print_message(self.format_help(), file) 
    File "/usr/lib/python2.7/argparse.py", line 2280, in format_help 
    formatter.add_arguments(action_group._group_actions) 
    File "/usr/lib/python2.7/argparse.py", line 273, in add_arguments 
    self.add_argument(action) 
    File "/usr/lib/python2.7/argparse.py", line 258, in add_argument 
    invocations = [get_invocation(action)] 
    File "/usr/lib/python2.7/argparse.py", line 534, in _format_action_invocation 
    metavar, = self._metavar_formatter(action, action.dest)(1) 
ValueError: too many values to unpack 
+0

興味深いことに、これまでのところ、これは代わりに 'argparse'のバグのようです。 –

+0

既にバグレポートがあります:http://bugs.python.org/issue14074 –

答えて

7

これは​​nargsのバグ、タプルmetavarと混在させないでください位置引数です。 integersは位置指定引数であり、オプションの--integersスイッチではありません。

いずれにもオプションの引数ます

parser.add_argument('--integers', metavar=('n','h'), type=int, nargs=2, help='Dimensions of the matrix') 

か位置引数を使用します。代わりに

parser.add_argument('n', type=int, help='Dimensions of the matrix') 
parser.add_argument('h', type=int, help='Dimensions of the matrix') 

を。

バグの修正候補については、Pythonバグトラッカーのissue 14074を参照してください。

+0

バグを見つけてくれてありがとう! – marshall

+0

'add_help = False'を' ArgumentParser() 'に渡すと、' -h'のヘルプ形式が無効になります。つまり、 './foo.py -h'は'。/ foo.py'と同じ情報を出力します。それは解決策ではありませんが、少なくともアプリケーションはクラッシュしません。 – Paglian

関連する問題

 関連する問題