Python Argparse:带有可选参数的问题是负数

我有一个小问题与argparse。我有一个选项xlim是一个情节的xrange。我想要能够传递像-2e-5这样的数字。但是这不行 – argparse解释这是一个位置参数。如果我做-0.00002它可以工作:argparse读取它为负数。是否可以阅读-2e-3?

代码如下,我将如何运行它的一个例子是:

./blaa.py --xlim -2.e-3 1e4 

如果我做以下工作:

./blaa.py --xlim -0.002 1e4 

代码:

parser.add_argument('--xlim', nargs = 2,
                  help = 'X axis limits',
                  action = 'store', type = float, 
                  default = [-1.e-3, 1.e-3])

虽然我可以通过这种方式让它工作,但我真的很想使用科学符号。任何人都有什么想法?

干杯

如注释所指出的那样,问题是一个前缀被解析为一个选项,而不是一个参数。解决方法的一种方法是更改​​用于具有prefix_chars参数的选项的前缀:

#!/usr/bin/python
import argparse

parser = argparse.ArgumentParser(prefix_chars='@')
parser.add_argument('@@xlim', nargs = 2,
                  help = 'X axis limits',
                  action = 'store', type = float,
                  default = [-1.e-3, 1.e-3])
print parser.parse_args()

示例输出:

$ ./blaa.py @@xlim -2.e-3 1e4
Namespace(xlim=[-0.002, 10000.0])

编辑:或者,您可以继续使用 – 作为分隔符,将xlim作为单个值,并使用类型中的函数来实现自己的解析:

#!/usr/bin/python
import argparse

def two_floats(value):
    values = value.split()
    if len(values) != 2:
        raise argparse.ArgumentError
    values = map(float, values)
    return values

parser = argparse.ArgumentParser()
parser.add_argument('--xlim', 
                  help = 'X axis limits',
                  action = 'store', type=two_floats,
                  default = [-1.e-3, 1.e-3])
print parser.parse_args()

示例输出:

$ ./blaa.py --xlim "-2e-3 1e4"
Namespace(xlim=[-0.002, 10000.0])
翻译自:https://stackoverflow.com/questions/9025204/python-argparse-issue-with-optional-arguments-which-are-negative-numbers

转载注明原文:Python Argparse:带有可选参数的问题是负数