2017-07-28 7 views
0

subparsersをPython 3ライブラリ​​を使用して入れ子にして作成したいと考えています。ソリューションを実装しようとした瞬間に、私はこのエラーメッセージを取得しています:ここで引数を入れ子にしたサブパーザー

AttributeError: 'ArgumentParser' object has no attribute 'add_parser' 

は、私が使用していたコードは次のとおりです。

def parse_args(): 
    """ 
    Parse and validate user command line. 
    """ 
    # Top-level parser 
    parser = argparse.ArgumentParser(
     description="foo" 
    ) 

    parser.add_argument(
     "-foo", 
     dest="foo", 
     help="foo", 
     required=True, 
     type=str 
    ) 

    subparsers = parser.add_subparsers(help='sub-command help') 

    # Parser for the "payload" command 
    parser_payload = subparsers.add_parser(
     "payload", 
     help="payload help" 
    ) 

    parser_payload.add_argument(
     "-b", 
     "--bar", 
     dest="bar", 
     help="bar", 
     type=str 
    ) 

    # Parser for the "payload->foobar" command 
    parser_payload_foobar = parser_payload.add_parser(
     "foobar" 
     help="foobar help" 
    ) 

    parser_payload_foobar.add_argument(
     "-bf", 
     "--barfoo", 
     dest="barfoo", 
     help="barfoo", 
     type=str 
    ) 

    return parser.parse_args() 
+0

どのバージョンですか?あなたは完全な痕跡を与えることができますか?機能を少し下げますか? – jonrsharpe

答えて

0

あなたがここにパターンを参照していますか?

subparsers = parser.add_subparsers(help='sub-command help') 
... 
parser_payload = subparsers.add_parser( # ok 
... 
parser_payload.add_parser( # error 

parseradd_subparsers方法があります。 A subparsersオブジェクト(これまでのもの)はadd_parserメソッドを持っています。エラーメッセージには、parserにはそのメソッドがないことが示されています。

parser_payloadにサブパーサーを追加する場合は、add_subparsersメソッドから開始する必要があります。

​​は、ドキュメンテーションから明白であろうとなかろうと、クラスを中心に構成されています。各クラスには定義されたメソッドがあります。

私は、オブジェクトのクラスと属性を作成されたものとして調べることができるインタラクティブな環境で開発したいと思っています。

+0

確かに、私はパーサオブジェクトとサブパーサオブジェクトの間で混乱していました。私は達成したいと思ったものが可能であったことを確信していませんでした。ありがとう! –

+0

このようなネスティングは可能ですが、私はそれを頻繁に見ていません。 'parser'でできることは、' parser_payload'で行うことができます。 – hpaulj

関連する問題