gpt4 book ai didi

python - 为什么调用 argparse.parse_args() 或 .parse_args(sys.argv) 时会有所不同

转载 作者:行者123 更新时间:2023-11-28 21:50:54 27 4
gpt4 key购买 nike

我在我的 python 代码中创建了以下参数解析器。

parser = argparse.ArgumentParser()
parser.add_argument('projectPath')
parser.add_argument('-project')
parser.add_argument('-release')
parser.add_argument('--test', default=False, action='store_true')
args = parser.parse_args()

我正在按以下方式执行我的程序。

myProgram.py /path/to/file -project super --test

如果我将上面的 sysntax 与

一起使用,它会工作正常
args = parser.parse_args()

但是,如果我将 sys.argv 用作输入

args = parser.parse_args(sys.argv)

解析器突然对参数的顺序很挑剔,我得到了无法识别的参数错误。

usage: fbu.py [-h] [-project PROJECT] [-release RELEASE] [--test] projectPath
fbu.py: error: unrecognized arguments: /path/to/file

正如我从错误中看到的,还使用了 -h 参数。路径参数必须在最后,并且错误在最后一个示例中有意义。但为什么它不关心第一个示例中的顺序?

编辑:我使用的是 python 版本 3.4.3

最佳答案

sys.argv 包含脚本名称作为第一项,即 myProgram.py。该参数占据了 projectPath 的位置。现在有一个额外的位置参数 /path/to/file,它无法与任何参数匹配,因此出现错误。

调用不带参数的 parse_args ArgumentParser 足够聪明,可以在解析时忽略脚本名称。但是当显式传递参数数组时,它不能这样做并且会解析所有内容。

关于python - 为什么调用 argparse.parse_args() 或 .parse_args(sys.argv) 时会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com