click.prompt搭配IntRange类型时如何支持空值输入返回None?
问题原因
你遇到的无限循环根源是click.IntRange默认会校验输入非空,用户输入空值时会直接触发类型校验失败,强制要求重新输入,代码永远走不到终止循环的判断分支。
解决方案
使用click.Optional类型包装器包裹IntRange,让类型校验规则支持空值输入并返回None,即可同时保留范围校验能力、支持空输入终止流程:
import click numbers = [] while True: num = click.prompt( "Enter a number", # Optional包装后支持空值返回None,同时保留IntRange的范围校验能力 type=click.Optional(click.IntRange(1, 10)), default=None, show_default=False # 隐藏默认值提示,输出效果和你预期的完全一致 ) if num is None: break numbers.append(num) print(f"List of numbers: {numbers}")
效果说明
修改后运行完全符合预期:
Enter a number: 1 Enter a number: 2 Enter a number: List of numbers: [1, 2]
如果用户输入超出1-10范围的数值,依然会触发IntRange的范围校验逻辑要求重新输入,不会丢失校验能力。
内容的提问来源于stack exchange,提问作者LondonRob
相关产品推荐
相关产品推荐

