问题描述
我正在解析参数输入:
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}}。