Python Argparse从命令行格式推断变量类型

Python Argparse从命令行格式推断变量类型,python,Python,我有一个简单的python脚本,它从命令行获取输入,然后修改名称列表文件。我是这样使用它的: python edit_namelist.py nml section key value 问题是该值可以是整数、浮点或字符串。目前,我使用了以下方法: def infer(s): ''' Try to parse input to integer. If it fails, keep it as string ''' try: s = int(s) excep

我有一个简单的python脚本,它从命令行获取输入,然后修改名称列表文件。我是这样使用它的:

python edit_namelist.py nml section key value
问题是该值可以是整数、浮点或字符串。目前,我使用了以下方法:

def infer(s):
    ''' Try to parse input to integer. If it fails, keep it as string '''
    try:
        s = int(s)
    except ValueError:
        pass
    return s

parser.add_argument("value",type=infer)
这是可行的,但前提是我的输入是整数或字符串。我想知道是否可以让
argparse
从命令行输入的格式推断变量类型,这样

python edit_namelist.py nml section key 10
python edit_namelist.py nml section key 10.
python edit_namelist.py nml section key "10"

分别解释为整数、浮点和字符串

您可能可以尝试使用
ast.literal\u eval(..)


您可能可以尝试使用
ast.literal\u eval(..)

这对我有用

def推断:
尝试:
s=浮动(s)
如果s//1==s:
返回整数(s)
返回s
除值错误外:
返回s
这对我很有效

def推断:
尝试:
s=浮动(s)
如果s//1==s:
返回整数(s)
返回s
除值错误外:
返回s

这适用于整数和浮点数,但不适用于字符串。然而,我注意到,如果我在引号中传递输入,它对每个引号都很有效。这意味着要输入字符串,我需要双引号,比如:
“10”
-->整数,
“10.”
-->浮点,
“'10'”
-->字符串,
“'ab'”
-->字符串。这适用于整数和浮点,但不适用于字符串。然而,我注意到,如果我在引号中传递输入,它对每个引号都很有效。这意味着要输入字符串,我需要双引号,比如:
“10”
-->整数,
“10.”
-->浮点,
“'10'”
-->字符串,
“'ab'”
-->字符串。
import ast

def infer(s):
    val = ast.literal_eval(s)
    acceptable_types = (int, str, float)
    if any(isinstance(val, x) for x in acceptable_types):
        return val
    raise SomeException("Bad Input")