Python函数返回None问题:异常处理后变量未正确存储
解决多次非法输入后合法值返回None的问题
你的代码存在三个关键问题,导致出现返回None的情况:
未正确获取用户输入
原代码里直接把提示字符串赋值给了lines,根本没捕获用户的输入内容。正确做法是用input()函数获取用户输入。isdigit方法未调用lines.isdigit是引用方法本身而非调用方法,会永远返回True(函数对象属于真值),必须写成lines.isdigit()才能检查字符串是否全为数字。递归调用未返回结果
触发ValueError异常时,递归调用get_number_of_lines()但没有返回该调用的结果,导致函数默认返回None,必须加上return传递递归后的返回值。
修正后的完整代码
MAX_LINES = 3 def get_number_of_lines(): try: while True: # 用input获取用户输入 lines = input("Enter the number of lines to be on (1-" + str(MAX_LINES) + ")? ") # 调用isdigit()方法检查是否为数字字符串 if lines.isdigit(): lines = int(lines) if 1 <= lines <= MAX_LINES: break else: print("Enter a valid number of lines.") return lines except ValueError: print("Please enter a number. ") # 返回递归调用的结果,避免返回None return get_number_of_lines() def main(): lines = get_number_of_lines() print(lines) # 执行主函数 if __name__ == "__main__": main()
额外说明:其实通过isdigit()检查后再转int,基本不会触发ValueError,所以异常处理分支可以考虑移除,不过保留的话必须保证递归调用有返回值。
内容的提问来源于stack exchange,提问作者MainframeXP
相关产品推荐
相关产品推荐

