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

Python程序读取pos.json时随机报FileNotFound异常求助

针对随机出现的FileNotFound异常的排查与解决

你的代码存在一个小隐患:直接使用open('./autoGen/pos.json', 'r').read()会导致文件句柄没有被显式关闭,虽然Python的垃圾回收机制会处理,但高频率调用时可能引发问题——不过这不是你遇到的随机10-20分钟无法读取文件、之后自动恢复的核心原因。结合你的场景,以下是最可能的成因和对应的解决思路:

  • 文件被其他进程临时操作
    大概率是有其他程序在这段时间内对pos.json进行了操作:

    • 生成该文件的脚本可能采用了“先删除原文件再重新创建”的逻辑,这会产生短暂的文件不存在窗口;
    • 备份工具、杀毒软件可能临时锁定或移动文件,完成后再恢复;
    • 其他进程以独占模式打开了文件,导致你的读取请求被阻塞(部分系统会将这种阻塞返回为FileNotFound)。
      解决:给读取逻辑增加重试机制,同时检查生成pos.json的程序,尽量改成“先写入临时文件,再替换原文件”的原子操作方式,避免出现文件不存在的间隙。
  • 相对路径的动态变化
    你使用的./autoGen/pos.json是相对路径,但Python的当前工作目录(CWD)可能被程序中的其他操作(比如调用os.chdir()、或者启动脚本的方式)修改,导致临时找不到文件。
    解决:改用绝对路径读取文件,同时用with语句确保文件正确关闭,代码示例:

    import json
    import os
    
    # 获取当前脚本所在目录的绝对路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    file_path = os.path.join(script_dir, 'autoGen', 'pos.json')
    
    with open(file_path, 'r') as f:
        currentGen = json.load(f)
    
  • 网络/远程文件系统的延迟
    如果autoGen目录在网络共享盘、NAS或云存储上,文件系统的缓存机制可能导致文件变更无法及时被读取端感知,甚至临时出现路径解析失败。
    解决:增加存在性检查和重试逻辑,比如:

    import json
    import os
    import time
    
    def read_pos_file():
        script_dir = os.path.dirname(os.path.abspath(__file__))
        file_path = os.path.join(script_dir, 'autoGen', 'pos.json')
        max_retries = 6  # 重试6次,总等待约10秒,可根据情况调整
        retry_interval = 2
    
        for _ in range(max_retries):
            if os.path.exists(file_path):
                try:
                    with open(file_path, 'r') as f:
                        return json.load(f)
                except Exception as e:
                    print(f"读取失败,重试中: {str(e)}")
            time.sleep(retry_interval)
        raise FileNotFoundError(f"重试{max_retries}次后仍无法读取文件: {file_path}")
    
    currentGen = read_pos_file()
    
  • 系统权限的临时变更
    部分系统的权限管理工具(如Linux的SELinux、Windows的UAC)可能临时调整了文件或目录的权限,导致你的Python进程无法访问,之后自动恢复。
    解决:查看系统日志(Linux的/var/log/syslog、Windows的事件查看器),排查这段时间内是否有相关权限变更记录;确保运行Python程序的用户对autoGen目录和pos.json文件拥有持续的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:53