Python中发生异常时如何重新执行循环?
问题分析与修复
原代码的核心问题是错误使用了except语句:except number < 0: 这种写法完全不符合语法规则,except只能捕获指定的异常类型(比如输入非整数时的ValueError),而number < 0是个布尔判断条件,根本不是异常,所以当你减到负数时,这个except块根本不会触发。
另外,当number变成负数后,循环条件number !=0依然成立,程序会继续让你输入,但此时number已经是负数,后续操作只会让它更负,完全达不到你想要的提示效果。
修正后的代码
number = 15 print(f"Subtract the number {number} until it has reached 0") while number != 0: try: x = int(input()) # 先判断扣除后会不会负数,再执行操作 if number - x < 0: print("You don't have enough points for that!") continue number -= x if number > 0: print(f"You have {number} points to spend!") elif number == 0: print("You have used all your points!") break except ValueError: # 处理用户输入非整数的情况 print("Please enter a valid integer!")
关键修改点
- 把“点数是否足够”的判断移到
try块内,在修改number之前先检查number - x < 0,如果成立直接提示并跳过后续操作 - 新增了对
ValueError的捕获,避免用户输入字母等非整数内容导致程序崩溃 - 当输入的数值会导致负数时,不修改
number的值,直接回到循环开头等待下一次输入
内容的提问来源于stack exchange,提问作者Ornsteiner
相关产品推荐
相关产品推荐

