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

Python3实现Collatz序列异常处理出现NameError问题求助

问题原因
  • 输入非整数内容时,try代码块内的number = int(input('Enter Number: '))会触发ValueError,直接跳转执行except分支的打印逻辑,number变量从未完成定义,后续while循环调用未定义的number自然抛出NameError。
  • 原代码while判断中int(number)属于冗余操作,输入转换成功后number本身就是整数类型,不需要重复转换。
修复方案

可以加输入循环,反复请求用户输入直到拿到合法整数后再执行后续的Collatz计算逻辑,代码如下:

def collatz(number):
    if number % 2 == 0:
        even_number = number // 2
        print(even_number)
        return even_number
    odd_number = number * 3 + 1
    print(odd_number)
    return odd_number

# 循环校验输入,只有输入合法才跳出循环
while True:
    try:
        number = int(input('Enter Number: '))
        break
    except ValueError:
        print('Please enter an integer')

while number != 1:
    number = collatz(number)
异常处理核心注意点
  • 不要在try代码块外依赖其内部可能赋值失败的变量,如果确实需要使用,要么提前给变量设置默认值,要么加逻辑判断确保变量赋值成功后再执行后续操作。
  • 输入校验类场景配合死循环使用,可以实现持续获取输入直到内容符合要求的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:01