Python 3.x 限制argparse add_参数中的输入字符串长度
我想添加字符串类型的参数,但将字符串长度限制为1Python 3.x 限制argparse add_参数中的输入字符串长度,python-3.x,argparse,Python 3.x,Argparse,我想添加字符串类型的参数,但将字符串长度限制为1 group.add_argument( "--test_param", dest="test_param", type=str, required=True, default=None, ) 是否有任何方法可以在这里执行此操作而不必稍后通过检查len(test_param)来引发错误?您可以尝试在类型中使用lambda函数 Ex: import arg
group.add_argument(
"--test_param",
dest="test_param",
type=str,
required=True,
default=None,
)
是否有任何方法可以在这里执行此操作而不必稍后通过检查
len(test_param)
来引发错误?您可以尝试在类型中使用lambda
函数
Ex:
import argparse
group = argparse.ArgumentParser(description='Data.')
group.add_argument(
"--test_param",
dest="test_param",
type=lambda x: x if x.isalpha() and len(x) <=1 else False, #Sample Function
required=True,
default=None,
)
args = group.parse_args()
value = getattr(args, 'test_param')
if value:
print(value)
else:
print("error!!!")
python sample.py --test_param fddd #->>error!!
python sample.py --test_param f #->>f
您可以在添加参数时使用可用的choices参数,例如在我的代码中,我只想从1或2中进行选择。我使用了以下代码段,如下所示:
parser.add_argument(
"report",
type=int,
metavar="[report #]",
help="1. for Annual Max/Min Temperature 2. for Hottest day of each year",
choices=[1, 2]
)
它将仅限制来自这些选项的输入,如果您给出了以下选项中的一个,它将显示错误结果:
usage: [report#] [data_dir]
[report #]
1 for Annual Max/Min Temperature
2 for Hottest day of each year
[data_dir]
Directory containing weather data files
main.py: error: argument [report #]: invalid choice: 3 (choose from 1, 2)
如果不想添加选项,可以使用lamda或验证数据的函数。您可以从下面的示例中获得帮助:
parser.add_argument(
"data_dir",
type=check_directory_availability,
metavar="[data_directory]",
help="Directory containing weather data files",
)
def check_directory_availability(dir_name):
if not os.path.isdir(dir_name):
raise NotADirectoryError("Provided directory name doesn't exists")
return dir_name
希望它能对您有所帮助。需要自定义类型功能;并不是说解析后的测试有什么问题。但这需要我在选项中包含所有可能的单个字符串的列表,这相当麻烦。我已经添加了这个问题的答案。你也可以看到。