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
相关产品推荐
相关产品推荐

