You need to enable JavaScript to run this app. Python编写文件备份程序时触发NameError: name 'src' is not defined报错求解
优惠活动
大模型
产品
解决方案
定价
更多

Python编写文件备份程序时触发NameError: name 'src' is not defined报错求解

NameError报错排查与代码修正

该报错的核心触发原因是代码缩进完全错位,导致Python作用域规则失效,你认知中已经定义的src变量实际从未在全局执行作用域完成赋值。

具体问题点

  • 作用域错位:代码中的if __name__ == '__main__'入口块被错误嵌套在backup()函数内部,而报错提示的backup(src, dest)调用行因为缩进失误落在全局最外层,这个位置的src既没有被定义为全局变量,也没有从函数作用域向外传递,直接触发未定义报错。
  • 变量边界混淆:backup()函数定义的src、dest是接收外部值的形参,你在函数内部通过input()获取的路径值被单独赋值给了sourceFilePath、destFilePath,从未和形参做绑定,两套路径变量完全脱节。
  • 逻辑笔误:注释掉的found = true存在Python语法错误(布尔值要求首字母大写,应为True);found = False缩进错误放置在for循环内部,会无条件覆盖目录存在的判定结果;脚本用到的isdir、listdir、path、copy2、argv均未做模块导入,即使修正缩进也会触发导入类报错。
  • 执行流错误:参数校验后的exit(1)缩进没有绑定到if判断分支下,会导致无论命令行参数是否符合要求,脚本都会直接退出,无法执行备份逻辑。

修正后可运行代码

# 导入依赖模块
from os import listdir, isdir, path
from sys import argv
from shutil import copy2

def backup(src, dest):
    # 校验源、目标目录是否存在
    found = True
    for directory in [src, dest]:
        if not isdir(directory):
            print(f'could not find {directory}')
            found = False
    if not found:
        exit(1)
    # 遍历源目录执行备份
    for sourceFileName in listdir(src):
        source_full_path = path.join(src, sourceFileName)
        dest_full_path = path.join(dest, sourceFileName)
        # 跳过子目录,仅备份普通文件
        if isdir(source_full_path):
            continue
        copy2(source_full_path, dest_full_path)

# 入口块与函数定义保持全局平级缩进
if __name__=='__main__':
    # 校验命令行参数
    if len(argv) != 3:
        print(f'Usage: {argv[0]} SRC DEST')
        exit(1)
    # 执行备份
    backup(argv[1], argv[2])
    print('Backup successful!')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 02:36:03