Python Argparse从命令行格式推断变量类型
我有一个简单的python脚本,它从命令行获取输入,然后修改名称列表文件。我是这样使用它的: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 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")