Python argparse 读命令行数据的鲁棒性
本人小白一个,对命令行输入不是很了解。某次运行程序时本应该输入--config_files
, 但输入成了--config_fil
。多次运行程序后才发现这个问题,但之前的程序运行没有问题,参数依然按照config_files
读入了,后来经过自己试验后才发现argparse对读入的识别不是全匹配,只要可以区分开,它就不往后面检查了。
比如你的参数代码是这样的:
parser.add_argument('--model', '-m', type=str, default='BPR', help='name of models')
parser.add_argument('--dataset', '-d', type=str, default='ml-100k', help='name of datasets')
parser.add_argument('--config_files', type=str, default=None, help='config files')
那么当你命令行输入:--c="xxx"
或者 --co="xxx"
, 它都会把xxx
按照config_file
读入。
但如果你的代码是这样的:
parser.add_argument('--model', '-m', type=str, default='BPR', help='name of models')
parser.add_argument('--dataset', '-d', type=str, default='ml-100k', help='name of datasets')
parser.add_argument('--config_files', type=str, default=None, help='config files')
parser.add_argument('--config_dict', type=str, default=None, help='config dict')
那么,如果你只是输入--c
或者--co
,因为程序没法区分这个参数是属于config_dict
还是config_files
, 所以会报error: ambiguous option
的错。
总之只要我们输入的参数标记可以被区分开, 那么即便不完整输入都可以被正确识别。
PS: 当然,如果你输入--config_filesssss
这种,还是没法识别为config_files
的。
以上就是我对这个问题的记录,希望可以给大家提供参考。当然,我没看过parser的源码,如果有错误,欢迎指正。