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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:01:20