Skip to main content
 首页 » 编程设计

python之类型错误 : 'function' object is not iterable

2025年05月04日9hnrainll

直到最近,这段代码才有效。我添加了一个提示用户输入文件名和扩展名的功能,但没有用,所以我又回到了这个版本。现在,当我尝试运行它时,我得到了这个:

Traceback (most recent call last): 
  File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 53, in <module> 
main() 
  File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 51, in main 
writer(final_counts(intermediate_count)) 
  File "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Parser/Single_File_Multistep_Counter.py", line 31, in final_counts 
for file_path in intermediate_file_list: 
TypeError: 'function' object is not iterable 

我也不完全确定这个错误是什么意思,在研究之后我只能找到 python object not iterable error in function和 python3 TypeError: 'function' object is not iterable这不能解决我的问题。

下面是给我错误的代码:

def final_counts(intermediate_file_list): 
    date_list = {} 
    for file_path in intermediate_file_list: 
        with open(file_path, "r") as f: 
            for line in f: 
                tockens = line.split(",") 
                if tockens[0] in date_list: 
                    date_list[tockens[0]] = date_list[tockens[0]] + tockens[1] 
                else: 
                    date_list[tockens[0]] = tockens[1] 
    return date_list 

如果需要,我会在以后的编辑中发布完整的代码。任何解释我需要更改的内容的详细答案都会非常有帮助,我想学习语言和我做错了什么,所以(希望)以后我不会犯同样的错误。

编辑:这是我的全部代码

import os, glob, csv 
 
location = "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Data Files" 
columnname = "smcn" 
timecolumn = "" 
filetype = ".processed" 
 
def intermediate_count(location, filetype): 
    intermediate_file_list = [] 
    for file_path in list(glob.glob(os.path.join(location, "*" + filetype))): 
        date_list = {} 
        print file_path 
        with open(file_path, 'r') as f: 
            for line in f: 
                tockens = line.split(",") 
                key = tockens[9] + "/" + tockens[15][:-4] #replace col_positon to 9 if necessary 
                if key in date_list: 
                    date_list[key] = date_list[key] + 1 
                else: 
                    date_list[key] = 1 
        with open(file_path + ".count", "w") as csv: 
            for item in date_list: 
                csv.write(item + "," + str(date_list[item]) + "\n") 
        intermediate_file_list.append(file_path + ".count") 
    return intermediate_file_list 
 
def final_counts(intermediate_file_list): 
    date_list = {} 
    for file_path in intermediate_file_list: 
        with open(file_path, "r") as f: 
            for line in f: 
                tockens = line.split(",") 
                if tockens[0] in date_list: 
                    date_list[tockens[0]] = date_list[tockens[0]] + tockens[1] 
                else: 
                    date_list[tockens[0]] = tockens[1] 
    return date_list 
 
def writer(date_list): 
    directory = location + "/" + "Total" 
    if not os.path.exists(directory): 
        os.makedirs(directory) 
    with open(directory + "/" + "Total.processed", "w") as f: # Lots of commas! 
        writer = csv.writer(f, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) 
        for key, value in date_list.items(): 
            writer.writerow(str([key]) + str(value)) 
 
def main(): 
    writer(final_counts(intermediate_count)) 
 
main() 

请您参考如下方法:

在黑暗中拍摄:

intermediate_count 是您创建的返回可迭代对象的辅助函数。

解决方案(如果我的猜测是正确的),你需要调用函数 (),否则正如所写你正在传递函数对象本身,这就是错误告诉你的内容

writer(final_counts(intermediate_count(location, filetype))) 
                                      ^