从Python

时间:2016-03-14 11:43:44

标签: python function python-2.7 call function-call

我的脚本包含三个功能:

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)

我很自信答案很接近,但我很困惑......

3 个答案:

答案 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()

做了这个伎俩。谢谢你的帮助!