我有一些看起来像这样的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')
但我想知道是否有更优雅的方式来做到这一点。重要的是我做想要显示错误,但只有一次。我无法摆脱错误的循环,因为我需要继续处理row
中reader
的其余部分。当我尝试从可能不存在的列表创建变量时,会出现IndexError
。我必须这样做,因为如果变量不存在,我必须跳过它而不是提供空白值。
因此,我奇怪的小困境。有没有更好的方法呢?最好的是“Pythonic”,作为速度,在这种情况下不是什么大问题。
答案 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)