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
相关产品推荐
相关产品推荐

