当前位置: 首页 > 面试题库 >

Python的argparse的可选位置参数

堵毅然
2023-03-14
问题内容

试图解析可选的位置参数时,我遇到了以下问题:

例:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('infile')
parser.add_argument('outfile', nargs='?')
parser.add_argument('-v', action='store_true')

print(parser.parse_args())

输出:

$ ./x.py -v in out
Namespace(infile='in', outfile='out', v=True)

$ ./x.py in out -v
Namespace(infile='in', outfile='out', v=True)

$ ./x.py in -v out
usage: x.py [-h] [-v] infile [outfile]
x.py: error: unrecognized arguments: out

为什么不接受第三个程序调用?这是argparse的限制吗?


问题答案:

这是argparse的局限性,但在3.7中已部分取消。

Unix工具通常不声称支持选项和参数的混合,即使它们经常支持。问题在于将其与子命令等其他功能结合使用会导致歧义。因此,通常,支持所有这些功能的库都会在问题上出现问题,并且不允许混用。或者,他们做一些骇人听闻的事情-
在最后,开始时,在某些难以预测的情况下允许选择,但在中间情况下则不允许。

那是argparse原来做的。但是3.7添加了Intermixed解析。

您必须手动致电parse_intermixed_args而不是parse_args

而且,如果您尝试将其与任何功能不兼容的功能结合使用,则会遇到异常(即使您传递的特定参数集没有歧义,这也使调试更加容易)。

但是否则,它将按预期工作:选项(当然还有它们的值)可以在命令行中的任意位置与位置参数自由混合。

不幸的是,我不知道要argparse在早期版本中获得3.7才能在PyPI上提供一个反向移植。半官方的argparsebackport主要用于根本没有2.7
/ 3.2之前的版本,而仅backport 3.4版本。



 类似资料:
  • 问题内容: 我有一个脚本,打算像这样使用: 是一个位置参数,其定义如下: 我希望它是可选的:未指定时,它应该只是。 不幸的是,当我不指定参数时,我得到了。 问题答案: 使用(或如果您需要多个目录) 扩展示例:

  • 问题内容: 我有一个小问题。我有一个选择是情节的。我希望能够传递类似的数字。但是,这不起作用-解释这是一个位置参数。如果我这样做了,请执行以下操作:将其读取为负数。是否可以阅读? 下面的代码,和我将如何运行它的一个示例是: 如果我执行以下操作,则可以: 编码: 尽管我可以使它以这种方式工作,但我确实更希望能够使用科学计数法。谁有想法? 干杯 问题答案: 正如评论所指出的那样,问题在于前缀被解析为选

  • 要指定可选的位置参数,请使用square []括号。 语法 (Syntax) void function_name(param1, [optional_param_1, optional_param_2]) { } 如果可选参数未传递值,则将其设置为NULL。 例子 (Example) void main() { test_param(123); } test_param(n1,

  • 我正在尝试编写一个函数,您可以通过argparse解析可变数量的参数--我知道我可以通过实现这一点。遗憾的是,argparse help的工作方式(以及人们通常在CLI中编写参数的方式)将位置参数放在最后。这导致我的位置参数作为可选参数的一部分被捕获。 要获得对参数的正确解析,我必须运行 那么我该如何: > 使argparse重新格式化用法输出,以减少误导,甚至更好:

  • 问题内容: 我正在尝试编写一个函数wo,您可以通过argparse解析可变数量的参数- 我知道我可以通过做到这一点。可悲的是,argparse帮助的工作方式(以及人们通常在CLI中编写参数的方式)使位置参数处于最后位置。这导致我的位置参数被视为可选参数的一部分。 运行它,如下面的用法说明所示: 但是如果我跑步给我 为了获得正确的参数解析,我必须运行 那么我该如何: 使argparse重新格式化用法

  • 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。 实参和形参数量必须一致 在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行),否则 Python 解释器会抛出 TypeError 异常,并提示缺少必要的位置参数。 例如: 运行结果为: Traceback (most rece