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

成功了。感谢您的帮助!