每个循环仅打印一次错误消息

时间:2014-08-25 23:28:47

标签: python for-loop error-handling

我有一些看起来像这样的Python:

for row in reader:
    if # something
       # do things
    else:
        try:
            # do more things
        except IndexError:
            logger.info('message')

最终发生的事情是,我得到一个巨大的输出墙,在循环的每次迭代中都会显示INFO:...message。它不需要出现超过1000次。离开循环后,我可以使用各种各样的“旗帜”,有点像这样:

for row in reader
    # if/else/try
        except IndexError:
            foo = True
if foo:
    logger.info('message')

但我想知道是否有更优雅的方式来做到这一点。重要的是我想要显示错误,但只有一次。我无法摆脱错误的循环,因为我需要继续处理rowreader的其余部分。当我尝试从可能不存在的列表创建变量时,会出现IndexError。我必须这样做,因为如果变量不存在,我必须跳过它而不是提供空白值。

因此,我奇怪的小困境。有没有更好的方法呢?最好的是“Pythonic”,作为速度,在这种情况下不是什么大问题。

1 个答案:

答案 0 :(得分:1)

只要保持一个柜台,有时最简单的方法是最好的。你甚至可以在最后添加一个漂亮的通知。

bad = 0
for row in reader:
    if # something
       # do things
    else:
        try:
            # do more things
        except IndexError:
            bad += 1
            if bad == 1:
                logger.info('message')
if bad:
    logger.info('%d bad things happened' % bad)