使用ArgumentParser遇unrecognized arguments错误,如何处理含空格的参数?
解决argparse解析带空格的逗号分隔参数报错问题
这个问题我之前也碰到过!本质是命令行shell会把空格当成参数的分隔符——当你输入-k polar bears,elephants时,shell会把polar作为-k的参数值,然后把bears,elephants当成一个完全独立的、没在脚本里定义的参数,自然就会抛出unrecognized arguments的错误了。
下面给你几个可行的解决办法:
方法1:给带空格的参数加引号(最简单的命令行层面解决)
直接在运行脚本时,把整个逗号分隔的关键词串用双引号或单引号括起来,让shell把它当成一个完整的参数传递:
python your_script.py -k "polar bears,elephants"
这样你的原有代码不需要做任何修改,args.keywords会拿到完整的"polar bears,elephants"字符串,split(',')后就能得到正确的列表['polar bears', 'elephants']。
方法2:修改脚本,支持多次指定关键词(更符合命令行惯例)
如果觉得让用户加引号有点麻烦,可以调整argparse的配置,让-k参数支持多次使用,每个关键词单独传递(带空格的关键词还是需要用引号括起来):
import argparse parser = argparse.ArgumentParser() # 添加action='append',允许多次使用-k参数 parser.add_argument('-k', '--keywords', help='单个搜索关键词,可多次使用', type=str, action='append') args = parser.parse_args() # 此时search_keyword就是用户输入的所有关键词组成的列表 search_keyword = args.keywords
运行时可以这样输入:
python your_script.py -k "polar bears" -k elephants
这种方式更符合命令行工具的常规用法,用户体验会更好。
内容的提问来源于stack exchange,提问作者hnvasa
相关产品推荐
相关产品推荐

