【问题标题】:How to loop back in python to specific point如何在python中循环回特定点
【发布时间】:2017-08-16 07:53:29
【问题描述】:

我有一个代码:

我希望我的程序在执行第三个 if 语句后返回 for 循环。当我使用“继续”时,它会返回到第二个 if 语句而不是返回到 for 循环。知道如何做到这一点吗?谢谢。

row = 0  
for line in fh:

    if line.startswith('CREATE'):
        startrow = row
    if row > startrow:
        if line.startswith('PRIMARY KEY'): (then go to the for loop)
        print row
    row = row + 1

【问题讨论】:

  • 说明你想做什么,而不是如何你想做什么。到目前为止,您的问题不包含您的目标。
  • 基本上我想捕获那些以'create'开头并以'Primary key'结尾的行之间的行。我的文件中有多个这样的行。所以我希望我的程序执行在遇到以“主键”开头的行时返回到 for 循环。
  • 使用布尔标志在关键位置打开和关闭行的输出,让循环正常运行。
  • 我不明白为什么它不起作用,但这就是为什么goto is considered harmful
  • 感谢您的 cmets。我尝试使用标志 .. 并且成功了!

标签: python goto continue


【解决方案1】:

根据评论中的描述,您希望打印符合某些条件的行范围,就像awk '/^CREATE/,/^PRIMARY KEY/ {print}'。出于某种原因,您从不存在的嵌套循环的概念中使用 goto 计划了这一点。我们可以编写嵌套循环,但我们不需要。

printing = False
for line in fh:
    if line.startswith('PRIMARY KEY'):
        printing = False
    if printing:
        print row
    if line.startswith('CREATE'):
        printing = True

这个变体一开始不打印行,遇到 CREATE 后开始打印行,遇到 PRIMARY KEY 后立即停止。您可以重新排序三个测试以实现其他组合,例如打印包含这些关键字的行。

【讨论】:

  • 非常感谢。这有帮助!
  • @Bhaskar 解决您的问题后,别忘了勾选已接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2020-09-20
  • 2020-02-19
  • 2019-04-14
  • 2017-03-05
  • 2018-05-15
相关资源
最近更新 更多