1

我的 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

是否以正确的方式使用Exceptionexcept 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

为什么记录器没有记录异常?

4

1 回答 1

1

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

在处理异常时,您应该尽可能具体。在您的情况下,您应该捕获IndexErrorandValueError而不是 general Exception

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

你的另一个问题:

为什么记录器没有记录异常?

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

于 2012-06-21T06:29:21.220 回答