如何在argparse帮助文本中添加%d

4 投票
2 回答
1522 浏览
提问于 2025-04-17 15:17

我在使用 Python 2.6.1 和 argparse 0.8 时遇到了一个问题,我想在帮助描述中添加 %d,比如说:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument('--range', metavar='range', type=str,
       help='generates a list of host from given range e.g. "host%d.example.com 1 224"')

args = parser.parse_args()

但是这会报错

$ ./args.py  -h
...
python2.6/site-packages/argparse.py", line 458, in _expand_help
    return action.help % params
TypeError: %d format: a number is required, not dict

这个错误我能理解,所以我尝试用转义字符来处理 %,比如:

parser.add_argument('--range', metavar='range', type=str,
       help='generates a list of host from given range e.g. "host%%d.example.com 1 224"')

但我还是遇到了另一个错误

$ ./args.py  -h
...
python2.6/site-packages/argparse.py", line 252, in format_help
    help = self._root_section.format_help() % dict(prog=self._prog)
TypeError: %d format: a number is required, not dict

所以我不太确定该如何正确地转义 %,才能在帮助输出中看到 %d

2 个回答

0

如果4个%让你觉得不舒服,这里有个小小的替代方案。

  parser.add_argument('--range', metavar='range', type=str,
        help=r'generates a list of host from given range e.g. "host%s.example.com 1 224"' % "%%d") 
1

因为 argparse 这个工具把字符串格式化了两次,所以出现了两个错误。解决这个问题的方法是把 % 符号加倍转义:

parser.add_argument('--range', metavar='range', type=str,
       help='generates a list of host from given range e.g. "host%%%%d.example.com 1 224"')

也就是说要用4个 % 符号。

撰写回答