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

