You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInputPlus的inputNum时allowRegexes参数正则不生效如何解决

问题根因

你遇到的问题核心是allowRegexes参数传值类型错误。PyInputPlus的allowRegexes要求传入正则表达式列表,你直接传入单个正则字符串时,程序会将字符串按字符迭代拆解为多条独立正则规则,其中包含单个s、q的匹配规则,只要输入内容包含s或q就会被放行,这才导致sam这类输入通过校验。


方案1:修正参数格式

把allowRegexes改为列表类型传入正则即可,只有完全匹配单个q/Q/s/S的非数字输入会被放行,其余非数字输入会被拦截要求重新输入:

msg = 'Enter value to add/replace or s to skip field or q to quit: '
answer = pyip.inputNum(prompt=msg, allowRegexes=[r'^[qQsS]$'], blank=False)

方案2:自定义校验逻辑(更可控)

如果不想依赖正则匹配的隐含规则,可以用inputCustom自己定义校验逻辑,避免踩参数坑:

def validate_input(input_str):
    lower_str = input_str.lower()
    if lower_str in ('q', 's'):
        return input_str
    # 校验是否为有效数字
    try:
        float(input_str)
        return input_str
    except ValueError:
        raise Exception('输入无效,请输入数字、s跳过或q退出')

msg = 'Enter value to add/replace or s to skip field or q to quit: '
answer = pyip.inputCustom(validate_input, prompt=msg, blank=False)

后续处理优化

拿到输入后先判断控制字符再转数字,进一步避免运行报错:

if answer.lower() == 'q':
    # 执行退出逻辑
elif answer.lower() == 's':
    # 执行跳过逻辑
else:
    num_val = float(answer)
    # 执行数字相关处理逻辑

内容的提问来源于stack exchange,提问作者trustory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 12:45:04