【问题标题】:Is there a Pythonic way of activating 'else' in a 'for' loop, when a continue has hit?当继续命中时,是否有一种 Pythonic 方式在“for”循环中激活“else”?
【发布时间】:2016-01-12 00:48:00
【问题描述】:

阅读this post 并没有真正回答我的问题。

我有一个

reader = csv.reader(source)
for row in reader:
    if len(row[0]) > 23:
        # Do stuff
        continue
    if low > float(row[1]) > high:
        # Do stuff
        continue
    if low > float(row[2]) > high:
        # Do stuff
        continue
else:
    print('All', reader.line_num, 'read successfully.')

设置,但else 被执行,尽管我跳过了for 循环。

我宁愿只在没有continue 被命中时才调用 else。

为了澄清,代码的目的是在 CSV 文件中删除错误/格式错误的数据行。因此,格式错误的行具有单独的错误处理。如果可能的话,使用“else”作为最终通知器会比使用标志更漂亮。

【问题讨论】:

  • 你应该用示例输入来解释你期望的输出。
  • else 如果由于迭代器耗尽而退出 for 循环,则调用 break 以避免调用 else
  • 我认为使用像continued = True 这样的标志变量虽然不是特别像pythonic,但最好的选择。

标签: python


【解决方案1】:

else 唯一重要的是循环是否因为到达可迭代对象的末尾而终止;它不关心循环内部发生了什么。

如果您想根据是否曾调用过 continue 有不同的行为,那么您必须自己跟踪。

【讨论】:

  • 很公平。我将不得不跟踪手动跳过的行。
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 2020-09-21
  • 2020-03-25
  • 2017-07-20
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多