2016-11-10 23 views
0

在讀取文件的特定行時是否有辦法處理異常?如何在讀取文件行時處理異常?

例如,說我有此塊:

with open(fileIn, 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    for i, row in enumerate(reader): 
     try: 
      # stuff 
     except: 
      pass 

,並解析一半的文件後,我得到的錯誤

IOError: [Errno 22] Invalid argument

上線

 for i, row in enumerate(reader): 

和我想繼續解析文件,跳過問題行。

回答

2

for...reader反覆呼叫next(reader)。要在循環時攔截異常,請執行循環並自行進行下一個調用。未經測試:

with open(fileIn, 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    i = -1 
    while True: 
     i += 1 
     try: 
      row = next(reader) 
     except StopIteration: 
      break 
     except IOError: 
      pass 
     else: 
      try: 
       # stuff 
      except: 
       pass 
1

csv.reader返回一個對象,它既遍歷一個類似文件的迭代器,並處理它在讀取時發現的內容。你有一個看起來不可恢復的IOError。 (我是對的嗎?)既然如此,那麼你能做的最好的事情就是找出輸入中的缺陷? Pedro Ghilardi建議在reading csv file without for這樣做。

+1

輸入是一個大於100 GB的文件,因此最好確保解析它的代碼是健壯的。該鏈接很有幫助,謝謝。 – jensph