我有一个读取csv文件的程序。有时用户会错误地尝试将Excel文件传递给程序,我想检测一下。
目前,我遇到了一个令人讨厌的错误,我似乎无法抓住它。
一个简单的例子:
from csv import DictReader
with open("an_excel_file_pretending_to_be_a_csv_file.csv", "rb") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
这会产生以下错误消息。
for row in reader:
File "c:\Python27\Lib\csv.py", line 107, in next
self.fieldnames
File "c:\Python27\Lib\csv.py", line 90, in fieldnames
self._fieldnames = self.reader.next()
Error: line contains NULL byte
当DictReader尝试读取第一行数据时会发生这种情况。
我想做的是将此作为例外。不幸的是,这不是一个例外,它只是从我的代码中剔除错误信息。
from csv import DictReader
with open("an_excel_file_pretending_to_be_a_csv_file.csv", "rb") as f:
reader = csv.DictReader(f)
try:
for row in reader:
print(row)
except Exception:
print "error"
没有捕获任何内容,错误仍然在我的代码中出现,该代码处于处理许多文件的无限循环中。
这里有一个类似的问题:Python CSV error: line contains NULL byte
但我想在我的代码中优雅地捕获错误。我怎么能这样做?
答案 0 :(得分:2)
你可以使用一般的try-except来捕获所有异常(小心,因为这可能很危险,隐藏代码中的错误)。
try:
# your code that can raise exceptions here
except Exception as e:
# handle ANY exception
else:
# this executes if no exception occurred (optional)
答案 1 :(得分:0)
csv.DictReader
之前,readline函数可用于检测类型
with open("file1.csv", "rb") as f:
print f.readline().split(",")