Python中的变量错误

时间:2016-08-22 02:32:40

标签: python variables

我在Python课程中,无法弄清楚为什么我的代码不起作用:

import os
def rename_files():
    file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank")

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
rename_files()

上面的代码返回:

Traceback (most recent call last):
  File "C:/Users/Kyle/Desktop/renamepy.py", line 5, in <module>
    for file_name in file_list:
NameError: name 'file_list' is not defined
>>> 

为什么没有定义file_name

3 个答案:

答案 0 :(得分:2)

这是缩进错误。您的for循环超出了rename_files()的范围,因为它没有缩进。它应该是:

import os
def rename_files():
    file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank")

    for file_name in file_list:
        os.rename(file_name, file_name.translate(None,"0123456789"))

rename_files()

答案 1 :(得分:0)

让我们来看看您的代码:

def rename_files():
    file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank")

rename_files()函数中,您定义了一个不返回任何内容的函数。您已经设置了一个本地作用域file_list,它将被释放,一旦您不在该函数之外就无法访问。

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
rename_files()

然后,当您在rename_files()函数之外时,尝试访问先前未在for循环中初始化的file_list,因此它会抛出{{1} }

NameError

然后你调用了NameError: name 'file_list' is not defined 函数,但函数外部仍然不存在rename_files()

在进行for循环之前,有几种方法可以确保实现file_list

解决方案1 ​​:使用全局变量。

file_list

解决方案2 :在函数外部进行file_list = [] def rename_files(): global file_list file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank") rename_files() for file_name in file_list: os.rename(file_name, file_name.translate(None,"0123456789")) 初始化。

file_list

解决方案3 (按照Karin的建议):将for-loop放入函数中:

file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank")
for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))

注意:这与解决方案2类似,因为他们试图将def rename_files(): file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank") for file_name in file_list: os.rename(file_name, file_name.translate(None,"0123456789")) 初始化和for循环放在同一范围内。

答案 2 :(得分:0)

你需要缩进你的for循环,以便它在file_list函数体内:

rename_file

由于import os def rename_files(): file_list = os.listdir(r"C:\Users\Kyle\Desktop\prank") for file_name in file_list: os.rename(file_name, file_name.translate(None,"0123456789")) rename_files() 仅在方法范围内。