Skip to main content
 首页 » 编程设计

Python "local variable referenced before assignment"错误尽管全局 key

2025年05月04日11luoye11

这是我的问题:

savedFileSize = 0 
savedFileCount = 0 
SUBFOLDER = False 
 
def saveFile(path, filename): 
    global savedFileSize 
    global savedFileCount 
 
    filepath = os.path.join(path, filename) 
    if SUBFOLDER: 
        try: 
            subpath = os.path.join(SAVEPATH, path.split("\\", 1)[1]) 
            if not os.path.exists(subpath): 
                os.makedirs(subpath) 
            shutil.copy(filepath, subpath) 
            savedFileCount += 1 
            savedFileSize += os.path.getsize(filepath)/(1024*1024) 
        except BaseException as e: 
            logging.exception(e) 
    else: 
        try: 
            shutil.copy(filepath, SAVEPATH) 
            savedFileCount += 1 
            savedFileSize += os.path.getsize(filepath)/(1024*1024) 
        except BaseException as e: 
            logging.exception(e) 

我一直收到“赋值前引用的局部变量‘savedFileCount’”错误。 但是变量 SUBFOLDER 可以正常工作。 savedFileSize 变量也可以正常工作。

请您参考如下方法:

我很高兴删除您的 pyc 文件解决了您的问题。但是,您的代码实际上并不调用全局变量。在大多数情况下,(不可避免的)使用全局变量是设计不太好的标志,可能会导致各种问题,包括名称冲突等。

您可以在没有全局变量的情况下轻松重构您的代码:

def saveFile(path, filename): 
    savedFileCount, savedFileSize = 0, 0 
    filepath = os.path.join(path, filename) 
    if SUBFOLDER: 
        try: 
            subpath = os.path.join(SAVEPATH, path.split("\\", 1)[1]) 
            if not os.path.exists(subpath): 
                os.makedirs(subpath) 
            shutil.copy(filepath, subpath) 
            savedFileCount = 1 
            savedFileSize = os.path.getsize(filepath)/(1024*1024) 
        except BaseException as e: 
            logging.exception(e) 
    else: 
        try: 
            shutil.copy(filepath, SAVEPATH) 
            savedFileCount = 1 
            savedFileSize += os.path.getsize(filepath)/(1024*1024) 
        except BaseException as e: 
            logging.exception(e) 
    return savedFileCount, savedFileSize 

然后在你的调用范围内:

totalCount, totalSize = 0 
for path, filename in tobesaved: 
    count, size = saveFile(path, filename) 
    totalCount += count 
    totalSize += size