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

Python科目管理程序file not found报错排查及功能实现求助

代码错误原因修正

以下是触发file not found报错以及其他运行错误的核心问题:

  • read_subjects函数的参数为file_name,但函数内部打开文件时错误使用了未定义的subjects变量,无法识别正确的目标文件名
  • 主函数调用read_subjects时错误传入了未定义的subject变量,而非用户输入的文件名变量file_name
  • 搜索逻辑中出现了未定义的hobby变量,会触发运行时报错
  • 代码中所有转义字符"需要替换为正常双引号,否则会触发语法错误
  • 原文件操作没有使用安全的上下文管理器,异常场景下可能出现文件句柄未正常关闭的问题
修正后的完整代码
# 显示菜单并获取用户选择
def menu():
    print('输入"1"打印科目列表')
    print('输入"2"搜索指定科目')
    print('输入"3"添加新科目')
    print('输入"q"退出程序')
    option = input('请输入选项: ')
    return option.lower()

# 读取科目文件
def read_subjects(file_name):
    with open(file_name, 'r', encoding='utf-8') as f:
        return f.readlines()

# 写入新科目到文件
def write_to_file(file_name, subject):
    current_lines = []
    try:
        current_lines = read_subjects(file_name)
    except:
        pass
    current_lines.append(subject + '\n')
    with open(file_name, 'w', encoding='utf-8') as f:
        f.writelines(current_lines)

# 主函数
def main():
    correct_file_name = False
    subjects = []
    # 循环校验文件名合法性
    while not correct_file_name:
        file_name = input('请输入要读取的文件名: ')
        try:
            subjects = read_subjects(file_name)
            correct_file_name = True
        except FileNotFoundError:
            print('错误:未找到指定文件,请重新输入')
        except Exception as e:
            print(f'文件读取错误:{e},请重新输入')

    # 主逻辑循环
    while True:
        selected_option = menu()

        # 退出程序
        if selected_option == 'q':
            print('程序已退出')
            break

        # 打印所有科目
        if selected_option == '1':
            print('===== 科目列表 =====')
            count = 0
            for line in subjects:
                count += 1
                print(f"{count}: {line.strip()}")
            print(f'科目总数: {count}')
            print('====================\n')

        # 搜索科目
        if selected_option == '2':
            search_key = input('请输入要搜索的科目关键词: ')
            print('===== 搜索结果 =====')
            count = 0
            for line in subjects:
                striped_line = line.strip()
                if search_key.lower() in striped_line.lower():
                    count += 1
                    print(f"{count}: {striped_line}")
            print(f'匹配到的科目总数: {count}')
            print('====================\n')

        # 添加新科目
        if selected_option == '3':
            new_subject = input('请输入要添加的新科目名称: ')
            write_to_file(file_name, new_subject)
            # 同步更新内存中的科目列表
            subjects = read_subjects(file_name)
            print(f'科目"{new_subject}"已添加成功\n')

if __name__ == '__main__':
    main()
测试用subjects.txt示例(放在和代码同一目录下)

语文
数学
英语
物理
化学
生物
政治
历史
地理
信息技术
体育
美术

运行示例
请输入要读取的文件名: subjects.txt
输入"1"打印科目列表
输入"2"搜索指定科目
输入"3"添加新科目
输入"q"退出程序
请输入选项: 1
===== 科目列表 =====
1: 语文
2: 数学
3: 英语
4: 物理
5: 化学
6: 生物
7: 政治
8: 历史
9: 地理
10: 信息技术
11: 体育
12: 美术
科目总数: 12
====================

输入"1"打印科目列表
输入"2"搜索指定科目
输入"3"添加新科目
输入"q"退出程序
请输入选项: 2
请输入要搜索的科目关键词: 理
===== 搜索结果 =====
1: 物理
2: 地理
匹配到的科目总数: 2
====================

输入"1"打印科目列表
输入"2"搜索指定科目
输入"3"添加新科目
输入"q"退出程序
请输入选项: 3
请输入要添加的新科目名称: 音乐
科目"音乐"已添加成功

输入"1"打印科目列表
输入"2"搜索指定科目
输入"3"添加新科目
输入"q"退出程序
请输入选项: q
程序已退出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:03