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

Python书籍阅读器循环实现:解决FileNotFoundError及输入校验问题

解决书籍阅读器的文件错误与逻辑问题

问题根源

  1. 输入无校验:直接用用户输入拼接文件名,既没检查输入是否为有效数字,也没验证是否在1-10范围内,非法输入直接触发文件找不到错误。
  2. 循环条件错误:option是字符串类型,和整数0比较永远为真,输入0无法退出程序。
  3. 异常处理缺失:没捕获文件打开时的FileNotFoundError,且原代码的else块绑定的是for循环(仅循环正常结束时执行),不是文件不存在的错误处理逻辑。
  4. 文件操作不规范:重复打开文件且未手动关闭,存在资源泄漏风险。

修复后的代码

import time

while True:
    user_input = input('Which Book would you like to read? (1-10, input 0 to exit): ')
    
    # 校验输入是否为有效数字
    if not user_input.isdigit():
        print("Error: Please enter a valid number between 0 and 10.")
        print()
        continue
    
    option = int(user_input)
    
    # 处理退出逻辑
    if option == 0:
        print("Goodbye")
        break
    
    # 校验数字范围
    if not (1 <= option <= 10):
        print("Error: Number must be between 1 and 10.")
        print()
        continue
    
    file_name = f"{option}.txt"
    try:
        # 统计单词数
        with open(file_name, encoding='utf-8') as f:
            file_contents = f.read()
            number_of_words = len(file_contents.split())
            print('Word Count:', number_of_words)
            time.sleep(2)
        
        # 逐行打印内容
        with open(file_name, encoding='utf-8') as f:
            for line in f:
                print(line, end='')  # 避免重复换行
                time.sleep(0.1)  # 可选延迟,提升阅读体验
    except FileNotFoundError:
        print(f"404 file not found: {file_name}")
    
    print()

关键改进点

  • 分层输入验证:先检查输入是否为数字,再判断范围,提前拦截非法输入,避免无效文件操作。
  • 优化循环逻辑:用while True配合break实现清晰的退出控制,解决类型匹配错误问题。
  • 异常捕获机制:通过try-except捕获FileNotFoundError,即使输入在1-10范围内但文件不存在,也能友好提示。
  • 规范文件操作:使用with语句自动管理文件资源,无需手动关闭,更安全简洁。
  • 阅读体验优化:调整打印逻辑避免重复换行,可选增加小延迟让内容逐行显示更自然。

内容的提问来源于stack exchange,提问作者Sinister Pear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:00