在Python中尝试/除以显示哪个文件引发了错误

时间:2018-07-02 11:42:18

标签: python pandas

我正在编写一个py,以导入大量文件,对其进行处理,然后输出到.csv。在Pandas中这是蛋糕,但是我无法控制传入的文件,因此我试图编写脚本以使文件处理是否以“错误”方式出现异常。

无论如何,我正在使用“尝试/例外”向用户显示其中一个文件中存在KeyError(基本上,当数据类型为int时,单元格中有一个“”)。

我的问题是:有没有办法让例外:带回引起错误的文件的文件名?

for csv in csvList:
        df = pd.read_csv(csv, header=0, skip_blank_lines=True, skipinitialspace=True)\
            .dropna(how='all')

        try:
            df[0] = df[0].astype(int)
            df[1] = df[1].astype(int)
            df[2] = df[2].astype(int)
            df[3] = df[3].astype(int)

            report_path = 'UPC_Ready_for_Import'
            if not os.path.exists(report_path):
                os.makedirs(report_path)

            df.to_csv(os.path.join(report_path, csv + '_import.csv'), index=False)

        except KeyError:
            print('Error within file, please review files')

2 个答案:

答案 0 :(得分:4)

假设csvList包含输入文件路径的列表:

for csv in csvList:
    ....
    try:
        ...
    except KeyError:
         print('Error within file {}, please review files'.format(csv))

答案 1 :(得分:0)

我可以这样写:

for csv in csvList:
        df = pd.read_csv(csv, header=0, skip_blank_lines=True, skipinitialspace=True)\
            .dropna(how='all')

        try:
            df[0] = df[0].astype(int)
            df[1] = df[1].astype(int)
            df[2] = df[2].astype(int)
            df[3] = df[3].astype(int)

            report_path = 'UPC_Ready_for_Import'
            if not os.path.exists(report_path):
                os.makedirs(report_path)

            file_name = os.path.join(report_path, csv + '_import.csv')
            df.to_csv(file_name, index=False)

        except KeyError:
            print('Error within file', file_name ', please review files')

主要思想是将文件名存储在变量file_name中,并在except块中使用它。