Python中的变量错误

Python中的变量错误,python,variables,Python,Variables,我正在学习Python课程,不明白为什么我的代码不能工作: 导入操作系统 def rename_文件(): file\u list=os.listdir(r“C:\Users\Kyle\Desktop\prank”) 对于文件列表中的文件名: 重命名(文件名,文件名,翻译(无,“0123456789”)) 重命名_文件() 上面的代码返回: Traceback (most recent call last): File "C:/Users/Kyle/Desktop/renamepy.py"

我正在学习Python课程,不明白为什么我的代码不能工作:

导入操作系统
def rename_文件():
file\u list=os.listdir(r“C:\Users\Kyle\Desktop\prank”)
对于文件列表中的文件名:
重命名(文件名,文件名,翻译(无,“0123456789”))
重命名_文件()
上面的代码返回:

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
>>> 
回溯(最近一次呼叫最后一次):
文件“C:/Users/Kyle/Desktop/renamepy.py”,第5行,在
对于文件列表中的文件名:
名称错误:未定义名称“文件列表”
>>> 

为什么未定义文件名?

这是一个缩进错误。您的
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()

这是一个缩进错误。您的
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()

让我们浏览一下您的代码:

def rename_files():
    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"))
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()
函数之外时,您尝试访问先前未在for循环中初始化的
file_列表
,因此它会抛出
namererror

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

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
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循环之前实现
文件列表

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

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"))
解决方案2:将
文件列表
初始化置于函数之外

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
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"))
解决方案3(根据Karin的建议):将for循环放入函数:

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"))
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()

注意:这与解决方案2类似,因为他们试图将
文件列表
初始化和for循环放在同一范围内。

让我们浏览一下您的代码:

def rename_files():
    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"))
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()
函数之外时,您尝试访问先前未在for循环中初始化的
file_列表
,因此它会抛出
namererror

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

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
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循环之前实现
文件列表

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

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"))
解决方案2:将
文件列表
初始化置于函数之外

for file_name in file_list:
    os.rename(file_name, file_name.translate(None,"0123456789"))
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"))
解决方案3(根据Karin的建议):将for循环放入函数:

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"))
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()

注意:这与解决方案2类似,因为它们试图将
文件列表
初始化和for循环放在同一范围内。

您需要缩进for循环,使其位于
重命名文件
函数的主体内:

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"))
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()

由于
文件\u列表
仅在方法的范围内。

您需要缩进for循环,使其位于
重命名\u文件的主体内
函数:

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"))
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()

由于
文件\u列表
仅在方法范围内。

谢谢!我习惯用括号。我不知道缩进定义了范围!非常感谢。我习惯用括号。我不知道缩进定义了范围!