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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:15:52