“'NoneType'对象不可迭代”错误

时间:2011-10-23 19:48:02

标签: python

刚写了我的第一个python程序!我在邮件中将zip文件作为附件保存在本地文件夹中。该程序检查是否有任何新文件,如果有的话,它会提取zip文件,并根据文件名提取到不同的文件夹。当我运行我的代码时,我收到以下错误:

回溯(最近一次调用最后一次):文件“C:/Zip/zipauto.py”,第28行,用于new_files中的文件:TypeError:'NoneType'对象不可迭代

任何人都可以告诉我哪里出错了。

非常感谢你的时间,

纳文 这是我的代码:

import zipfile
import os

ROOT_DIR = 'C://Zip//Zipped//'
destinationPath1 = "C://Zip//Extracted1//"
destinationPath2 = "C://Zip//Extracted2//"

def check_for_new_files(path=ROOT_DIR):

    new_files=[]
    for file in os.listdir(path):
        print "New file found ... ", file

def process_file(file):

    sourceZip = zipfile.ZipFile(file, 'r')
    for filename in sourceZip.namelist():
            if filename.startswith("xx") and filename.endswith(".csv"):
                    sourceZip.extract(filename, destinationPath1)
            elif filename.startswith("yy") and filename.endswith(".csv"):
                    sourceZip.extract(filename, destinationPath2)
                    sourceZip.close()

if __name__=="__main__":
    while True:
            new_files=check_for_new_files(ROOT_DIR)
            for file in new_files: # fails here
                    print "Unzipping files ... ", file
                    process_file(ROOT_DIR+"/"+file)

3 个答案:

答案 0 :(得分:7)

check_for_new_files没有return statement,因此隐含地返回None。因此,

new_files=check_for_new_files(ROOT_DIR)

将new_files设置为None,您无法迭代None

返回check_for_new_files中的读取文件:

def check_for_new_files(path=ROOT_DIR):
    new_files = os.listdir(path)
    for file in new_files:
        print "New file found ... ", file
    return new_files

答案 1 :(得分:1)

以下是您的NEXT 2问题的答案:

(1)while True::你的代码将永远循环。

(2)您的函数check_for_new_files不会检查新文件,它会检查任何文件。您需要在处理后将每个传入文件移动到存档目录,或使用某种时间戳机制。

答案 2 :(得分:0)

例如,student_grade = dict(zip(names, grades))确保名称和等级是列表,并且都具有至少一个以上的要迭代的项目。这对我有帮助