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

Python猜数程序触发TypeError错误求助:非整数输入后再输整数报错

问题排查与解决:TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

错误原因

问题出在non_zero函数的递归处理逻辑中:

  • 当输入非整数触发ValueError时,函数会递归调用自身,但没有返回递归调用的结果。
  • 这导致第一次输入错误后,外层的non_zero函数最终返回None,而非递归调用后得到的有效整数。
  • 后续执行random.randint(1, inp_data)时,inp_data为None,randint内部需要对参数进行运算,从而抛出NoneType与int无法相加的错误。

修复方案

在non_zero函数的except代码块中,添加return语句,让递归调用的结果能被外层函数接收并返回。

修正后的代码

# import the random package
import random

# This is to check whether number is negative or not.
def non_zero(data):
    try:
        while True:
            data1 = int(input(data))
            if data1 <= 0:
                pass
            else:
                break
    except ValueError:
        # 新增return,返回递归调用的结果
        return non_zero(data)
    else:
        print("else blockdata:", data1)
        return data1


# This function will verify the guess and random number
def guess(gue_num, ran_num):
    while True:
        if gue_num < ran_num:
            print("Too small!")
            gue_num = non_zero("Guess: ")
        elif gue_num > ran_num:
            print("Too large!")
            gue_num = non_zero("Guess: ")
        else:
            print("Just Right!")
            break


inp_data = non_zero("Level: ")
ran_data = random.randint(1, inp_data)
gue_data = non_zero("Guess: ")
guess(gue_data, ran_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:43