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

pysftp.Connection.walktree()遇无读权限目录报错如何跳过继续遍历

解决pysftp walktree遍历无权限目录中断的方案

问题原因

walktree方法本身没有内置异常处理逻辑,当你在目录回调函数中调用sftp.listdir_attr访问无权限目录时,抛出的权限异常会直接终止整个遍历流程。

解决方案

在目录回调函数中新增异常捕获逻辑,捕获到权限不足/无法访问的异常时直接跳过当前目录即可,不影响后续其他目录的遍历。

修改后的完整代码

with pysftp.Connection(domain, username=USER,
                       password=PWD, port=port,
                       cnopts=cnopts) as sftp:
    filelist = []

    # 目录处理回调:新增异常捕获跳过无权限目录
    def dir_found_list_files(path):
        if not path:
            return
        try:
            files = sftp.listdir_attr(path)
        # 可根据实际抛出的异常类型调整捕获范围,部分环境下需要额外加入paramiko的SSHException
        except (PermissionError, OSError):
            # 无访问权限,直接跳过当前目录
            return
        for file in files:
            if 'r' in file.longname[:4]:
                filelist.append(path+'/'+file.filename)

    # 文件处理回调
    def file_found(path):
        pass

    # 未知类型处理回调
    def unknown_file(path):
        pass

    sftp.walktree("/", file_found, dir_found_list_files, unknown_file, recurse=True)

补充说明

如果运行时仍然出现未捕获的中断异常,可以打印异常类型,将对应异常类补充到except的捕获元组中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 11:15:04