如何将切片对象的负索引解析为argparse.ArgumentParser

时间:2018-05-02 14:24:05

标签: python slice argparse

我想将切片字符串作为参数,见下文

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

我应该如何支持负索引作为第一个切片参数?

1 个答案:

答案 0 :(得分:2)

幸运的是,argparse默认情况下会理解=令牌

$ python slice-parse.py -s=-5:
slice(-5, None, None)

-5直接按照预期的方式工作的原因是由于argparseimplemented some heuristics,这在链接文档中有详细说明(基本上-5看起来像一个数字,-5:没有。)

此问题主要是由argparse将所有-(默认情况下)视为标志引起的。这可以使用prefix_chars重新定义。