Python 如何确认文件是有效的csv文件

Python 如何确认文件是有效的csv文件,python,csv,exception-handling,Python,Csv,Exception Handling,我有一个程序可以读取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

我有一个程序可以读取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
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"
当听写器试图读取第一行数据时,就会发生这种情况

我想做的是把这当作一个例外。不幸的是,这不是一个例外,它只是带着错误消息从我的代码中消失了

    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
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"
没有捕获任何内容,错误仍然会从我的代码中爆发出来,而我的代码正处于处理许多文件的无限循环中

这里有一个类似的问题:


但是我想在我的代码中优雅地捕捉错误。如何才能做到这一点?

您可以使用一般的尝试,但不捕获所有异常(请小心,因为这可能会很危险,会在代码中隐藏错误)


在使用
csv.DictReader

with open("file1.csv", "rb") as f:
   print f.readline().split(",")

也许只要试一下,除了它?如果它抛出异常,那么您就无法处理它。还是继续吧。另外,请注意:您不应该捕获所有异常。@ssundarraj我知道这一点,我已经在我的回答中添加了一个关于这一点的警告,并且代码中的注释明确表示
ANY
exception