【问题标题】:Python argparse AssertionError when using mutually exclusive group使用互斥组时的Python argparse AssertionError
【发布时间】:2020-06-19 06:55:33
【问题描述】:

这是我的简单 test.py 脚本:

import argparse

parser = argparse.ArgumentParser('A long string that goes on and on and on'
                                 'and on and on and on and on and on and on '
                                 'and on and on and on and on and on and on '
                                 'and on and on and on and on and on and on ')
me_group = parser.add_mutually_exclusive_group()
me_group.add_argument('-f', help=argparse.SUPPRESS)
me_group.add_argument('-o', help=argparse.SUPPRESS)
parser.add_argument('-t', help='c')
parser.parse_args()

当我运行以下命令时:

python test.py --help

我得到了这个 AssertionError:

...
  File "/usr/lib/python2.7/argparse.py", line 332, in _format_usage
    assert ' '.join(opt_parts) == opt_usage
AssertionError

这似乎只发生在我压制一个互斥组中的所有论点时。如果一个或多个没有被抑制,那么一切正常。如果我打印出比较的两侧:

print ' '.join(opt_parts)
print opt_usage

我得到以下信息:

[-h] [-t T]
[-h]  [-t T]

看起来那里有一个额外的空间。知道为什么会这样吗?是不是我做错了什么?

【问题讨论】:

    标签: python python-2.7 argparse


    【解决方案1】:

    这是抑制 args 时的一个已知问题。只有当使用线足够长以至于需要包装时才能到达。见2236317890

    您可以通过将互斥组移动到参数末尾来避免这种情况:

    import argparse
    
    parser = argparse.ArgumentParser('A long string that goes on and on and on'
                                     'and on and on and on and on and on and on '
                                     'and on and on and on and on and on and on '
                                     'and on and on and on and on and on and on ')
    parser.add_argument('-t', help='c')
    me_group = parser.add_mutually_exclusive_group()
    me_group.add_argument('-f', help=argparse.SUPPRESS)
    me_group.add_argument('-o', help=argparse.SUPPRESS)
    parser.parse_args()
    

    结果:

    python test.py -h
    usage: A long string that goes on and on and onand on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on
           [-h] [-t T]
    
    optional arguments:
      -h, --help  show this help message and exit
      -t T        c
    

    【讨论】:

    • 谢谢。在我的实际代码中,我有更多参数,并且将抑制的参数移到最后是有效的。
    猜你喜欢
    • 2021-12-20
    • 2011-06-09
    • 2020-07-29
    • 2011-06-13
    • 2011-12-13
    • 1970-01-01
    • 2014-07-29
    • 2012-12-04
    相关资源
    最近更新 更多