我的django视图通过一个列表,使用正则表达式检测列表中的特定元素,最后返回内容的字典。
解析列表时可能会出现IndexError
和ValueError
。
我需要处理这种情况下的异常。我试过这样的
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没有记录异常?
答案 0 :(得分:1)
在Exception中使用Exception类作为e:正确的方法 处理源自上述函数的任何异常?
处理异常时,您应尽量使其具体。在您的情况下,您应该抓住IndexError
和ValueError
而不是一般Exception
:
try:
...
except (ValueError, IndexError) as e:
...
你的另一个问题:
为什么logger没有记录异常?
这取决于记录器的配置。您正在打印“调试”消息,但可以将其设置为仅记录/显示级别为“错误”或更高级别的消息。有关详细信息,请参阅Python中的logging documentation。