使用基类处理django中的异常

时间:2012-06-21 06:16:37

标签: python django unit-testing

我的django视图通过一个列表,使用正则表达式检测列表中的特定元素,最后返回内容的字典。 解析列表时可能会出现IndexErrorValueError

我需要处理这种情况下的异常。我试过这样的

def parse_list(oldlist):
    try:
        newlist=create_newlist(oldlist)
    except Exception as e:
        logger.debug(str(e))
    else:
        mydict = make_dict(newlist)

def create_newlist(oldlist):
    mydict = {}
    for elem in oldlist:
        if re.match('somepattern',elem[0]):
            mydict['somekey']=int(elem[0].strip())
        else:
            raise ValueError(elem[0],' expects an integer')
    ...
    return mydict

使用Exception中的except Exception as e:类来处理源自上述函数的任何异常的正确方法吗?

当我写一个单元测试方法时

def test_me(self):
    dl = parse_list(self.somelist)
    print 'dl=\n',dl
    self.assertTrue(len(dl),0)

我得到了控制台输出

ERROR: test_me (myapp.tests.ParseTest)
..
IndexError: list index out of range

为什么logger没有记录异常?

1 个答案:

答案 0 :(得分:1)

  

在Exception中使用Exception类作为e:正确的方法   处理源自上述函数的任何异常?

处理异常时,您应尽量使其具体。在您的情况下,您应该抓住IndexErrorValueError而不是一般Exception

try:
    ...
except (ValueError, IndexError) as e:
    ...

你的另一个问题:

  

为什么logger没有记录异常?

这取决于记录器的配置。您正在打印“调试”消息,但可以将其设置为仅记录/显示级别为“错误”或更高级别的消息。有关详细信息,请参阅Python中的logging documentation