2015-06-25 127 views
0

我有一個程序,它讀取csv文件。有時用戶錯誤地嘗試將Excel文件傳遞到程序中,我想檢測這些。如何確認一個文件是一個有效的csv文件

目前,我得到一個令人討厭的錯誤,我似乎無法趕上它。

一個簡單的例子:

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

也許只是嘗試,但它之前檢測類型?如果它拋出異常,那麼你就無能爲力了。不妨繼續前進。此外,檢查了這一點:http://stackoverflow.com/a/2985005/4029893 –

回答

2

你可以使用一般的嘗試 - 除了捕獲所有異常(小心,因爲這可能是危險的,在你的代碼中隱藏錯誤)。

try: 
    # your code that can raise exceptions here 
except Exception as e: 
    # handle ANY exception 
else: 
    # this executes if no exception occurred (optional) 
+0

你不應該捕捉所有的例外。 – ssundarraj

+0

@ssundarraj我知道這一點,我已經在我的回答中添加了關於此的警告,並且代碼中的評論明確指出了「ANY」異常 – Caumons

0

readline的功能,可用於使用csv.DictReader

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