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

如何在单行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03