2014-03-26 49 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