我想将切片字符串作为参数,见下文
import argparse
def _parse_slice(s):
a = [int(e) if e.strip() else None for e in s.split(":")]
return slice(*a)
if __name__ == '__main__':
p = argparse.ArgumentParser()
p.add_argument('-s', type=_parse_slice)
args = p.parse_args()
print(args.s)
它与正索引一起正常工作,例如,-s 1:10
,-s -5
(产生slice[None, -5, None]
)也很好,但错误输出为负索引作为第一个参数,例如, -5:
usage: slice-parse.py [-h] [-s S]
slice-parse.py: error: argument -s: expected one argument
我应该如何支持负索引作为第一个切片参数?
答案 0 :(得分:2)
幸运的是,argparse
默认情况下会理解=
令牌
$ python slice-parse.py -s=-5:
slice(-5, None, None)
-5
直接按照预期的方式工作的原因是由于argparse
有implemented some heuristics,这在链接文档中有详细说明(基本上-5
看起来像一个数字,-5:
没有。)
此问题主要是由argparse将所有-
(默认情况下)视为标志引起的。这可以使用prefix_chars
重新定义。