我制作了成功运行的Python代码,但是当作为模块导入时,它无法解压不可迭代的NoneType对象

问题描述 投票:0回答:1
import os
import sys
import shutil
from src.logger import logging
from src.exception import CustomException

from dataclasses import dataclass

## intitialize the Data Ingestion configuration

@dataclass
class DataIngestionconfig:
    train_data_path:str=os.path.join('artifacts','train')
    test_data_path:str=os.path.join('artifacts','test')
    valid_data_path:str=os.path.join('artifacts','valid')

## create the data ingestion class

class DataIngestion:
    def __init__(self):
        self.ingestion_config=DataIngestionconfig()

    def initiate_data_ingestion(self):
        logging.info('Data Ingestion method starts')

        try:

            Train = os.path.join('notebooks\data\Train')
            print(Train)
            Test = os.path.join('notebooks\data\Test')

            def get_filenames(directory_path):
                filenames = [os.path.join(directory_path, filename) for filename in os.listdir(directory_path)]
                return filenames
            
            train_filenames = get_filenames(Train)
            test_filenames = get_filenames(Test)

            print(len(train_filenames))
            print(len(test_filenames))

            # Divide the train_filenames list into train and validation sets
            valid_filenames = train_filenames[50:]
            train_filenames = train_filenames[:50]

            logging.info('Split Data into Train and Validation')

            os.makedirs(self.ingestion_config.train_data_path, exist_ok=True)
            for filename in train_filenames:
                shutil.copy(filename, self.ingestion_config.train_data_path)

            os.makedirs(self.ingestion_config.test_data_path, exist_ok=True)
            for filename in test_filenames:
                shutil.copy(filename, self.ingestion_config.test_data_path)

            os.makedirs(self.ingestion_config.valid_data_path, exist_ok=True)
            for filename in valid_filenames:
                shutil.copy(filename, self.ingestion_config.valid_data_path)


            return(
                self.ingestion_config.train_data_path,
                self.ingestion_config.test_data_path,
                self.ingestion_config.valid_data_path

            )

        except Exception as e:
            logging.info('Exception occured at Data Ingestion Stage')
            raise CustomException(e,sys)

    

# if __name__ == '__main__':
#     obj = DataIngestion()
#     train_path, test_path, valid_path = obj.initiate_data_ingestion()
# print(train_path, test_path, valid_path)

每当我运行这个代码文件时,我都会得到我的参数 笔记本\数据\火车 60 1 文物/火车 工件/测试 文物/有效

import os
import sys
import shutil
from src.logger import logging
from src.exception import CustomException

from src.components.data_ingestion import DataIngestion



if __name__=='__main__':
    obj = DataIngestion()
    train_path, test_path, valid_path = obj.initiate_data_ingestion()
    print(train_path,test_path,valid_path)

但是当我将其用作模块时,我总是会得到这个 回溯(最近一次调用最后一次): 文件“d:\project\BMI\src\pipelines raining_pipeline.py”,第 13 行,位于 train_path、test_path、valid_path = obj.initiate_data_ingestion() TypeError:无法解压不可迭代的 NoneType 对象 我一直被困在这个问题上,有人可以解决这个问题吗

python module typeerror nonetype iterable-unpacking
1个回答
0
投票

看起来你的函数运行并返回 None 而不是元组。

可能是因为您使用它们的文件夹的路径。 你能调试这个函数并看看哪里失败了吗?

© www.soinside.com 2019 - 2024. All rights reserved.