Python选择性复制作业报错求助:Traceback错误排查
解决选择性复制文件的Traceback错误
你的代码存在几个明显问题,导致运行时出现Traceback错误,以下是问题分析和修复方案:
问题点
- 参数校验逻辑错误:
ext参数为空时,抛出的错误信息不符合逻辑,应该提示参数缺失而非硬写.jpg - 文件夹创建缺陷:
os.mkdir(dest_folder)会在目标文件夹已存在时直接报错,无法重复运行程序 - 文件路径定位错误:遍历子文件夹时,仅使用文件名
filename无法定位文件,必须拼接当前文件夹的完整路径 - 未复用传入参数:代码固定判断
.jpg扩展名,没有使用函数接收的ext参数,失去了函数的通用性 - 冗余目录切换:
os.chdir(src_folder)属于不必要操作,直接使用绝对路径处理更可靠
修复后的代码
import os import shutil def selective_copy(src_folder: str = None, ext: str = None, dest_folder: str = None) -> None: # 修正参数校验的错误提示 if src_folder is None: raise AttributeError('src_folder must be given.') if ext is None: raise AttributeError('ext must be given.') if dest_folder is None: raise AttributeError('dest_folder must be given.') src_folder = os.path.abspath(src_folder) # 用makedirs创建文件夹,支持多级目录且忽略已存在的情况 dest_folder = os.path.abspath(dest_folder) os.makedirs(dest_folder, exist_ok=True) # 直接遍历源文件夹的绝对路径,无需切换目录 for foldername, subfolders, filenames in os.walk(src_folder): print(f"Looking in folder: {foldername}...") # 使用传入的ext参数判断文件扩展名 for filename in filenames: if filename.endswith(ext): # 拼接文件的完整源路径 src_file_path = os.path.join(foldername, filename) print(f"Copying file: {filename}...") # 执行复制操作 shutil.copy(src_file_path, dest_folder) print("Done.") def main(): selective_copy('../', '.jpg', 'new_folder') if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Katie Kus
相关产品推荐
相关产品推荐

