CSV文件读取遇锁定问题:如何判断读取操作是否成功?
文件被锁定时的重试读取方案
读写CSV文件时,常会碰到这个错误:The process cannot access the file because another process has locked a portion of the file。你想让代码持续重试直到读写成功,写了循环读取的草稿,但不知道怎么判断读取是否成功,还问能不能通过判断FILE是否为列表来验证——答案是不行,得换个方式。
为什么不能靠判断列表?
当文件被其他进程锁定时,io.open()或者File.read()会直接抛出异常(比如Windows下的PermissionError,跨平台的OSError),根本走不到FILE = File.read().splitlines()这一步,自然没法通过FILE的类型来判断成功与否。正确的做法是捕获异常来识别读取失败。
优化后的可用代码
import time import io timeout = time.time() + 120 # 设置120秒超时 syncresult = "success" FILE = [] while True: time.sleep(0.5) # 每次重试前等待500毫秒 # 先检查是否超时 if time.time() > timeout: syncresult = "timeout" break try: # 尝试读取文件 with io.open(SlogFilePath, "r", encoding="utf-16(LE)") as File: FILE = File.read().splitlines() # 能走到这里说明读取成功,直接跳出循环 break except (PermissionError, OSError) as e: # 捕获文件锁定或无法访问的异常,继续重试 print(f"读取失败,重试中:{e}") continue OUT = FILE
核心要点
- 异常捕获逻辑:专门捕获文件被锁定、无权限访问这类异常,以此判断读取失败,继续循环。
- 循环终止条件:要么读取成功跳出,要么超时后标记结果退出。
- 变量规范:别用
bool这种Python关键字当变量名,容易出语法问题。
内容的提问来源于stack exchange,提问作者Gerhard_P
相关产品推荐
相关产品推荐

