Python开发个人备份工具点击备份报PY_VAR0路径不存在错误
问题原因
你报错的核心原因是没有正确获取Tkinter StringVar 存储的实际路径值:
- Tkinter的
StringVar是专门用来绑定UI组件的特殊变量对象,直接对它做str()转换只会得到类似PY_VAR0的内部标识字符串,不是你存在里面的路径值,需要调用.get()方法才能拿到实际存储的文本内容。 - 同时你的备份函数里还有两处逻辑错误:目标路径存在判断逻辑写反、
copytree目标路径参数错误。
修复方案
替换你的backup_func函数为以下代码即可解决报错:
def backup_func(): global src_choosed, dest_choosed # 调用.get()方法获取StringVar里存储的实际路径 src_path = src_choosed.get() dest_path = dest_choosed.get() folder = os.path.basename(src_path) # 用os.path.join拼接路径适配不同操作系统的路径分隔符 new_dest = os.path.join(dest_path, folder) # 修正判断逻辑:目标路径已经存在的话先删除旧目录,否则copytree会触发目录已存在报错 if os.path.exists(new_dest): shutil.rmtree(new_dest) # 正确的拷贝目标是拼接后的子目录路径,不是原始目标根路径 shutil.copytree(src_path, new_dest) m_box.showinfo("提示", "备份完成")
额外优化建议(可选)
- 首次运行如果
path.pkl文件不存在会直接触发报错,建议修改读取pickle的代码处理首次运行场景:
path_list = [] if os.path.exists("path.pkl"): with open("path.pkl","rb") as readFile: path_list = pickle.load(readFile)
- 所有文件读写操作建议使用
with语法,自动管理文件句柄避免资源泄漏。
内容的提问来源于stack exchange,提问作者Ganesha Gamer
相关产品推荐
相关产品推荐

