19

我有一个默认值,其中包含一个“%”,我也将其插入到我的论点的帮助文档中。例如:

default = "5% foo"
animrender_group.add_argument(
    "--foo",
    default=default,
    help="Foo amount. Default: %s" % default,
)
args = parser.parse_args()

parse_args() 上的 argparse 错误

[snip]
    args = parser.parse_args()
[snip]"../python2.5/site-packages/argparse.py", line 622, in _expand_help
    return self._get_help_string(action) % params
ValueError: unsupported format character 'O' (0x4f) at index 83
4

3 回答 3

22

我尝试了一个传统的转义字符,但没有成功。然后我发现了一条关于使用 '%' 作为转义字符的评论,这很有效。例如:

default = "5% foo"
foo_group.add_argument(
    "--foo",
    default=default,
    help="Foo amount. Default: %s" % default.replace(r"%", r"%%")),
)
args = parser.parse_args()

我很高兴我不需要用“[百分号]”替换所有“%”。哈。

于 2014-01-16T17:02:03.393 回答
7

包含默认值的另一种方法是%(default)s在帮助行中使用 a。

p=argparse.ArgumentParser()
p.add_argument('--foo', default="5% foo", help="Foo amount. Default: %(default)s")
p.print_help()

产生

usage: ipython [-h] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO   Foo amount. Default: 5% foo

argparse文档中:

帮助字符串可以包含各种格式说明符,以避免重复程序名称或参数默认值等内容。可用的说明符包括程序名称、%(prog)s 和 add_argument() 的大多数关键字参数,例如 %(default)s、%(type)s 等:

于 2014-01-16T17:22:12.883 回答
1

如果您没有默认值并且只想在帮助消息中使用百分号,请添加另一个%以对其进行转义:

import argparse
p=argparse.ArgumentParser()
p.add_argument('--foo', help="Foo is always 100%%!")
p.print_help()

这给了你:

usage: [-h] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO   Foo is always 100%!
于 2020-12-30T11:18:30.637 回答