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

Python非数字输入触发NameError及输入范围校验问题

解决Python输入校验时的非数字报错问题

嘿,我看你这段代码的问题很明确——当用户输入非数字内容时,直接调用int(choise)会触发类型转换异常(你提到的NameError应该是笔误,实际是ValueError),因为input()返回的是字符串,只有纯数字字符串才能顺利转成整数。咱们来给这段代码加上异常处理和完整的输入校验逻辑,确保不管用户输入啥都不会崩:

def subselect():
    while True:
        choice = input("Please select a Subsystem to monitor: ")
        # 先处理空输入的情况
        if not choice.strip():
            print("Oops, you didn't enter anything! Please input a number between 1 and 9.")
            continue
        # 尝试转换为整数,捕获非数字输入的异常
        try:
            choice_num = int(choice)
            # 检查数值是否在1-9的有效范围内
            if 1 <= choice_num <= 9:
                print(f"Successfully selected subsystem {choice_num}!")
                return choice_num  # 符合要求就返回,退出循环
            else:
                print("Invalid range! The number must be between 1 and 9.")
        except ValueError:
            print("That's not a valid integer! Please enter a whole number from 1 to 9.")

关键改进点:

  • 异常捕获:用try-except ValueError包裹整数转换操作,当输入非数字时,会友好提示用户而不是直接抛出报错
  • 空输入处理:先判断输入是否为空(或全是空格),提前拦截无效输入
  • 范围校验:把范围判断改成更直观的1 <= choice_num <= 9,逻辑更清晰
  • 明确反馈:给用户每一种无效输入都提供明确的提示,让用户知道哪里错了

这样修改后,不管用户输入字母、符号、空值还是超出范围的数字,程序都能稳定运行,直到用户输入符合要求的数值为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:05:31