2014-03-26 80 views
0

我想知道是否有可能將異常捕獲到列表中(存儲錯誤),繼續執行for item in list,直到所有項目都被迭代爲止,然後對錯誤進行排序並打印唯一的錯誤?有關異常處理的建議

希望這是有道理的。這裏是一個功能的一個簡單的例子,試圖說明我的意思:

def function1(list1, list2) 
    for item in list1: 
     for item in list2: 
      try: 
       do stuff here #iterates both lists 
      except: 
       capture exception append to list 
       errors = sort(exceptions) 
    print unique exceptions 
+0

打印異常時,「獨一無二」是什麼意思? – martineau

回答

-2

它易於收集和不易過濾

class SetForFilter(set): 
    def add(self,x): 
     if x in self: 
      return False 
     else: 
      super(SetForFilter,self).add(x) 
      return True 


def function1(list1, list2): 
    errors = [] 
    for item in list1: 
     for item in list2: 
      try: 
       do stuff here #iterates both lists 
      except Exception as e: 
       errors.append(e) 

    types = SetForTFilter() 
    unique = filter(lambda x: types.add(type(x)), errors) 
    for e in unique: print repr(e) 

首先用於存儲錯誤創建列表。 python中的所有異常都應基於內置的Exception類,因此except Exception表示捕獲所有異常。 as e表示異常將存儲在e變量中。將e添加到我收集的所有錯誤中。

所有例外都是獨一無二的。也許你想捕獲唯一的異常類型?

types = SetForFilter()已設置(僅接受唯一對象)如果添加,則返回True,否則返回False。

+1

-1使用列表補充副作用 – wim

+0

@wim對不起,你能解釋爲什麼eri給了-1,我不知道你的意思是「使用list comp的副作用嗎? – iNoob

+0

@wim替換了[]來過濾,什麼做意思? – eri