使用 Python Argparse 时在可选参数中使用“-”时出现问题

Problem using '-' inside an optional argument when using 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 对待 - 的方式;它们的唯一目的是防止 shell 将 ; 视为命令终止符。

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

解决方案是防止 argparse-999,-99;-9 视为单独的参数。使用 --name=value 形式使其成为包含 -p 的参数的 部分

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

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