我的脚本包含三个功能:
get_file():返回特定目录中所有.xls文件的文件名(file_list)列表
data_conversion():处理来自file_list的文件中包含的数据
work_flow():调用get_file()和data_conversion()
def work_flow():
x = get_file() #returns list of .xls files
y = [filepath + item for item in x] #add filepath
counter = 0 #to check how many files are processed
for file in y:
try:
data_conversion()
counter +=1
except ValueError:
pass
print counter, 'Files processed.'
print '-------------------------------'
return()
work_flow()
问题如下:如果我将工作流()中包含的代码添加到脚本的末尾而没有该函数,那么一切都运行得很好。但是,如果我将其嵌套在一个函数中,我会收到以下错误消息:
“未定义全局变量data_conversion”
非常感谢您的建议!感谢!!!
编辑:感谢您的帮助到目前为止。我检查了代码,问题似乎在data_conversion()中。如果我只在data_conversion()中包含一个print函数,那么一切都运行得很顺利。所以这里是data_conversion()的片段似乎是问题所在:
def data_conversion():
print("Executes")
book = xlrd.open_workbook(file) #LOOKS LIKE THE PROBLEM IS HERE?
print("Does not execute")
return()
以下是get_file()的代码:
# CREATES A LIST WITH ALL .XLS FILES IN FILEPATH
def get_file():
path = filepath
file_list = list()
listing = os.listdir(path)
for infile in listing:
if infile.endswith('.xls'):
file_list.append(infile)
return(file_list)
我很自信答案很接近,但我很困惑......
答案 0 :(得分:2)
我怀疑您的功能data_conversion
在之后被定义为,您致电work_flow
。这就是你得到这个错误的原因。
移动上面data_conversation
的定义,它会起作用。
更好的是:不要在脚本的核心调用函数,而是在最后使用它调用它们:
if __name__ == '__main__':
work_flow()
这将确保在调用之前定义所有函数,并允许您从其他模块导入模块而不执行代码。
答案 1 :(得分:0)
是的,没错。如果data_conversation的定义是在调用之后,或者你拼错了它的定义,就会发生这种情况。
答案 2 :(得分:0)
我知道了 - 该函数从未调用过该文件!因此:
def data_conversion(file): #instead of ()
.....
return()
和
def work_flow():
.....
.....
data_conversion(file) #instead of ()
.....
return()
做了这个伎俩。谢谢你的帮助!