从 Python 中的函数内部调用函数
Calling a function from within a function in Python
我的脚本包含三个函数:
get_file() : returns 特定目录中所有 .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()
问题如下:如果我将不带函数的workflow()中包含的代码添加到脚本末尾,一切运行正常。但是,如果我将它嵌套在函数中,则会收到以下错误消息:
"global variable data_conversion not defined"
非常感谢您的建议!谢谢!!!
编辑:感谢您到目前为止的帮助。我检查了代码,问题似乎在 data_conversion() 内。 如果我只在 data_conversion() 中包含打印功能,一切都会顺利进行。所以这是来自 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)
我很有信心答案很接近,但我很卡...
我怀疑你的函数 data_conversion
是在你调用 work_flow
之后 定义的 。这就是您收到此错误的原因。
将data_conversation
的定义移到上面即可。
更好的是:不要在脚本的核心调用函数,而是在最后调用它们,使用:
if __name__ == '__main__':
work_flow()
这将确保您的所有函数在您调用它们之前都已定义,并允许您从其他模块导入您的模块而无需执行代码。
是的,没错。如果 data_conversation 的定义在调用之后或者您拼错了它的定义,就会发生这种情况。
我明白了 - 该文件从未被函数调用过!因此:
def data_conversion(file): #instead of ()
.....
return()
和
def work_flow():
.....
.....
data_conversion(file) #instead of ()
.....
return()
成功了。感谢您的帮助!
我的脚本包含三个函数:
get_file() : returns 特定目录中所有 .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()
问题如下:如果我将不带函数的workflow()中包含的代码添加到脚本末尾,一切运行正常。但是,如果我将它嵌套在函数中,则会收到以下错误消息:
"global variable data_conversion not defined"
非常感谢您的建议!谢谢!!!
编辑:感谢您到目前为止的帮助。我检查了代码,问题似乎在 data_conversion() 内。 如果我只在 data_conversion() 中包含打印功能,一切都会顺利进行。所以这是来自 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)
我很有信心答案很接近,但我很卡...
我怀疑你的函数 data_conversion
是在你调用 work_flow
之后 定义的 。这就是您收到此错误的原因。
将data_conversation
的定义移到上面即可。
更好的是:不要在脚本的核心调用函数,而是在最后调用它们,使用:
if __name__ == '__main__':
work_flow()
这将确保您的所有函数在您调用它们之前都已定义,并允许您从其他模块导入您的模块而无需执行代码。
是的,没错。如果 data_conversation 的定义在调用之后或者您拼错了它的定义,就会发生这种情况。
我明白了 - 该文件从未被函数调用过!因此:
def data_conversion(file): #instead of ()
.....
return()
和
def work_flow():
.....
.....
data_conversion(file) #instead of ()
.....
return()
成功了。感谢您的帮助!