2017-07-28 61 views
0

我想使用python 3庫​​創建嵌套subparsers。目前我正在努力實現解決方案時,此錯誤消息:Argparse嵌套子分析器

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 

parser具有add_subparsers方法。 A subparsers對象(以前有過)有一個add_parser方法。錯誤消息說parser沒有該方法。

如果你想添加子分析器到parser_payload你必須以add_subparsers方法開始。

​​圍繞類來組織,無論從文檔中是否明顯。每個類都有其定義的方法。

我喜歡在交互式環境中開發,在交互式環境中,我可以根據創建的get來檢查對象的類和屬性。

+0

事實上,我對解析器和子解析器的對象感到困惑,我不確定我想達到什麼是可能的,因此,我的問題。謝謝! –

+0

像這樣嵌套是可能的,雖然我沒有經常見到它。任何你可以用'parser'完成的事情,你可以用'parser_payload'完成。 – hpaulj