我试图在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
答案 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
。