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

