如何在单行for循环中处理磁盘缺失引发的'No such file or directory'错误?
解决方案
你当前的实现使用字典推导式直接执行驱动器打开操作,Python的推导式语法不支持内置异常捕获,一旦遇到系统中不存在的驱动器,open调用抛出的No such file or directory(对应FileNotFoundError异常类型)就会直接中断程序执行。
方案1:显式循环捕获异常(推荐,可读性更高、易扩展)
drive_map = {} for item in myList: drive_letter = item[3] # 已经处理过的驱动器无需重复打开 if drive_letter in drive_map: continue try: disk_handle = open(r"\\.\{}:".format(drive_letter), 'rb') drive_map[drive_letter] = disk_handle except FileNotFoundError: # 可自定义不存在驱动器的处理逻辑,比如打印提示、记录日志等 print(f"驱动器{drive_letter}不存在,已跳过") # 后续遍历逻辑 for item in myList: # 先判断驱动器是否存在,避免抛出KeyError if item[3] not in drive_map: continue disk = drive_map[item[3]] # 此处添加你的业务逻辑
方案2:封装辅助函数适配推导式
如果需要保留推导式的写法,可以把打开逻辑和异常处理封装成独立函数,再在推导式中过滤无效结果。
def try_open_drive(drive_letter): try: return open(r"\\.\{}:".format(drive_letter), 'rb') except FileNotFoundError: return None # 推导式自动过滤打开失败的驱动器 drive_map = {k: v for k, v in ((item[3], try_open_drive(item[3])) for item in myList) if v is not None}
注意事项
- 驱动器句柄使用完成后需要主动调用
close()方法释放资源,避免资源占用;如果是单次读写操作,更推荐使用with上下文管理器自动管理句柄生命周期。 - 如果业务要求所有驱动器必须存在,捕获异常后可以主动抛出自定义错误终止程序,无需跳过处理。
内容的提问来源于stack exchange,提问作者Chex2020
相关产品推荐
相关产品推荐

