使用Python Argparse时在可选参数内使用'-'的问题

问题描述

我正在解析参数输入:

python parser_test.py --p "-999,-99;-9"

我收到此错误

parser_test.py: error: argument --p: expected one argument

在可选参数中包含“-”是否有特定原因

"-999,-99;-9"

即使在双引号内也会抛出错误?我需要能够包含“-”符号。

代码如下:

import argparse

def main():
    parser = argparse.ArgumentParser(description='Input command line arguments for the averaging program')
    parser.add_argument('--p',help='input the missing data filler as an integer')
    args = parser.parse_args()

if __name__=='__main__':
    main()

解决方法

引号没有改变argparse如何对待-的方式;它们的唯一目的是防止外壳将;当作命令终止符。

argparse首先查看 all 个参数,并通过检查哪些选项以 实际定义了哪些选项,而不管实际上定义了哪些选项-。对于可能是负数的事物(例如-999),它是一个例外,但前提是没有定义的看起来像数字的选项。

解决方案是防止argparse看到-999,-99;-9作为单独的参数。使用-p格式使其成为包含--name=value的参数的 part

python parser_test.py --p="-999,-99;-9"

您还可以使用"--p=-999,-99;-9"--p=-999,-99\;-9,以及编写参数的许多其他可能性,这些参数将使Shell将命令行解析为两个单独的命令python parser_test.py --p-999,-99和{{ 1}}。