argparse在 nargs='*' 时结果不一致
我在使用argparse时,当 nargs='*' 时,得到的不正确的结果。 当我把下面的代码按 foo -l 运行时,输出如下:
verb = None
如果我按 foo -l alpha 运行,它会输出:
LIST
verb = LIST
这是一个bug吗,还是我使用得不对?
import argparse
def parse_cmd_line():
verb = None
parser = argparse.ArgumentParser( description = 'stuff')
parser.add_argument('-l', '--list', nargs='*', default=None, help='list contents' )
args = parser.parse_args()
if (args.list): verb = 'LIST'; print("LIST")
print("verb = ", str(verb))
parse_cmd_line()
解决方案
正如 @Anerdw所述,你的逻辑错误出在 if args.list: 的检查上。这里检查的是 args.list 的“真值”,其中“真值”定义为:不是 None;数值类型为非0;列表、序列、集合、字典等为非空;或者更一般地,如果对象的 __bool__() 方法返回 True。
我想你要检查的是 if args.list is not None:,它即使在空列表时也会触发,但如果 args.list 为 None,则不会触发(像根本没有指定 -l 选项时那样)。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。