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

UnboundLocalError报错求助:定时文件备份脚本问题排查

问题分析与解决

1. 核心错误原因:UnboundLocalError

在take_backup()函数中,你对dest_file_name执行了赋值操作(dest_file_name = src_file_name),Python会自动将该变量判定为局部变量。但在赋值前的if dest_file_name != ""判断中,你已经引用了这个未定义的局部变量,因此触发UnboundLocalError。

2. 其他代码问题

  • 缩进错误:try块未正确包裹后续代码,if语句和except块的缩进不符合Python语法规范。
  • schedule调用错误:schedule.every(10).second.do(take_backup())直接执行了函数,应传入函数对象take_backup(不带括号)。
  • 冗余逻辑:全局变量已定义dest_file_name = "file.txt",函数内的dest_file_name = src_file_name属于重复操作,无实际意义。

修复后的完整代码

from datetime import date
import os
import shutil
import schedule
import time  # 添加time模块维持脚本运行

today = date.today()
date_format = today.strftime("%d_%b_%Y_")

src_file_name = "file.txt"
src_folder = "C:\\Users\\Xealtron\\Desktop\\Backup\\BackupFolder"
dest_file_name = "file.txt"
dest_folder = "C:\\Users\\Xealtron\\Desktop\\bup"


def take_backup():
    try:
        # 直接使用全局变量dest_file_name,避免局部变量未定义问题
        if dest_file_name != "":
            full_dest_name = date_format + dest_file_name
            shutil.copy2(os.path.join(src_folder, src_file_name),
                         os.path.join(dest_folder, full_dest_name))
            print("备份完成")
    except FileNotFoundError:
        print("文件不存在,请检查路径是否完整")


# 传入函数对象,不要直接调用
schedule.every(10).second.do(take_backup)

# 维持脚本运行,确保定时任务触发
while True:
    schedule.run_pending()
    time.sleep(1)

关键修复点说明

  • 函数中若仅读取全局变量,无需额外声明,直接使用即可(本案例无需修改全局变量,直接调用即可)。
  • 修正try/except缩进,确保代码块被正确包裹。
  • 添加time模块和循环逻辑,让脚本持续运行,否则schedule定时任务无法生效。
  • 将目标文件名拼接单独提取,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:56