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

时间:2017-04-20 08:10:07

标签: 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)
    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"

分别被解释为整数,浮点数和字符串。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用ast.literal_eval(..)

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")

答案 1 :(得分:0)

这对我有用。

wget https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz
tar xzvf Python-3.4.0.tgz
cd python3.4/
./configure
make
sudo make install