如何将切片对象的负索引解析为 argparse.ArgumentParser
How to parse negative index for slice object to argparse.ArgumentParser
我想给切片字符串作为参数,见下文
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
我应该如何支持负索引作为第一个切片参数?
幸运的是,argparse
默认情况下理解 =
令牌
$ python slice-parse.py -s=-5:
slice(-5, None, None)
-5
可以像预期的那样直接工作的原因是 argparse
有 implemented some heuristics,链接文档中有详细说明(基本上 -5
看起来像一个数字,-5:
没有)。
这个问题主要是由 argparse 将所有 -
(默认情况下)视为标志引起的。这可以使用 prefix_chars
.
重新定义
我想给切片字符串作为参数,见下文
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
我应该如何支持负索引作为第一个切片参数?
幸运的是,argparse
默认情况下理解 =
令牌
$ python slice-parse.py -s=-5:
slice(-5, None, None)
-5
可以像预期的那样直接工作的原因是 argparse
有 implemented some heuristics,链接文档中有详细说明(基本上 -5
看起来像一个数字,-5:
没有)。
这个问题主要是由 argparse 将所有 -
(默认情况下)视为标志引起的。这可以使用 prefix_chars
.