Uncatchable Null Byte csv.Error异常

时间:2017-12-18 20:00:24

标签: python-3.x csv exception

我试图在CSV文件的最后一行捕获Null Byte Exception:

def Catch(csv_filename):
    with open(csv_filename,'r+') as File:
        File_reader = csv.reader(File,delimiter="\t",dialect='excel-tab')
        a = []
        for row in File_reader:
            try:
                a.append(row)
            except csv.Error:
                return "Error"

Catch("/../DataLogger.csv")

但是引发了_csv.Error:

Traceback (most recent call last):
File "/../test.py", line 21, in <module>
Catch("/../DataLogger.csv")
File "/../test.py", line 13, in Catch
for row in File_reader:
    _csv.Error: line contains NULL byte

我不明白为什么没有使用该函数捕获异常。 我使用的是python 3.4

2 个答案:

答案 0 :(得分:2)

这是因为只要代码到达for语句就会发生异常。

a.append行中不会发生异常,csv模块在​​for循环的迭代中完成其工作。

一旦你知道,修复是微不足道的:

try:
   for row in File_reader:
       a.append(row)
except csv.Error:
    return "Error"

请注意,可能会尝试使用直接转换来列出:a = list(File_reader),但由于异常将在list转换中发生,a将无法填充,如果文件的开头包含您想要读取的有用数据(但由于您返回错误字符串,这似乎并不重要),这会很麻烦。

答案 1 :(得分:1)

def Catch(csv_filename):
    with open(csv_filename,'r+') as File:
        try:
            File_reader = csv.reader(File,delimiter="\t",dialect='excel-tab')
            a = []
            for row in File_reader:
                a.append(row)
        except csv.Error
            return "Error"

Catch("/../DataLogger.csv")

整个解析必须在Try / catch中,而不仅仅是a.append