局部变量' newfile'在分配之前引用

时间:2017-04-16 20:00:24

标签: python

'''想要重命名文件,删除数组中的所有坏字符" bad_pattern"。 我首先从坏图案中读取所有字符,然后比较文件名中的字符。 如果它发现任何被替换为" _"当循环结束文件时没有奇怪的字符会被返回以供以后使用。

然后在方法moveFiles()中,我应该获得预览方法的输出并将其保存在变量newfile中。 最后我想重命名该文件。

我收到错误:

local variable 'newfile' referenced before assignment

这是我的代码:

file = t#est.txt
bad_pattern= ["ã", "â", "é", "è", ", "ò", "ù", "û", "~", "^", "#"","\s"]

def filename_replacer(file):

    for char in bad_pattern:
        for char_good in file:
            if char_good == char:
                newfile = file.replace(char_good, "_")
    return newfile


def moveFiles():
    files = os.listdir(startDir+"/"+app)
    for file in files:
        newfile = filename_replacer(file)
        try:
            os.rename(file,newfile)
        except Exception as e:
            print(str(e))

2 个答案:

答案 0 :(得分:2)

回溯很有帮助,但问题就在这里:

def filename_replacer(file):
    for char in bad_pattern:
        for char_good in file:
            if char_good == char:
                # If next line never executes, newfile is undefined for return
                newfile = file.replace(char_good, "_")
    return newfile

newfile更改为file,它应该可以解决问题。如果没有找到错误的模式,file将保持不变。

答案 1 :(得分:0)

尝试在try / except语句中移动newfile变量。我不完全理解,但try语句发生在您的主函数的不同范围内,因此在try语句之外定义newfile将不会在其中定义它。
试试这个

def moveFiles():
    files = os.listdir(startDir+"/"+app)
    for file in files:
        try:
            newfile = filename_replacer(file)
            os.rename(file,newfile)
        except Exception as e:
            print(str(e))