Python 在django中处理异常-使用基类

Python 在django中处理异常-使用基类,python,django,unit-testing,Python,Django,Unit Testing,我的django视图遍历一个列表,使用正则表达式检测列表中的特定元素,最后返回内容的dict。 分析列表时,可能会出现索引器错误和值错误 我需要处理这种情况下的异常。我试过这样做 def parse_list(oldlist): try: newlist=create_newlist(oldlist) except Exception as e: logger.debug(str(e)) else: mydict = mak

我的django视图遍历一个列表,使用正则表达式检测列表中的特定元素,最后返回内容的dict。 分析列表时,可能会出现
索引器错误
值错误

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

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 as e:
中的
Exception
类是否是处理源自上述函数的任何异常的正确方法

当我编写单元测试方法时

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
为什么记录器不记录异常

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

在处理异常时,您应该尽可能具体。在您的情况下,您应该捕获
索引器错误
值错误
,而不是一般的
异常

try:
    ...
except (ValueError, IndexError) as e:
    ...
你的另一个问题:

为什么记录器不记录异常

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

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

在处理异常时,您应该尽可能具体。在您的情况下,您应该捕获
索引器错误
值错误
,而不是一般的
异常

try:
    ...
except (ValueError, IndexError) as e:
    ...
你的另一个问题:

为什么记录器不记录异常

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