【问题标题】:iPython: Kill a for-loop with try/except in it?iPython:用 try/except 杀死一个 for 循环?
【发布时间】:2019-10-17 18:21:29
【问题描述】:

我知道我应该避免陷入这些情况,但我喜欢使用 iPython 并在实验时保留变量。我从 Spyder 中粘贴一段代码并让它们运行,然后检查变量等。现在,我有一段这样的代码:

for a in range(bignum):
  try:
    <something>
  except:
    print('Badness')

我启动它并意识到我在那里有一个错误,但现在我无法使用 ctrl-C 停止它,因为 try/except 只是打印消息并继续前进。有没有办法在不丢弃我的会话的情况下停止循环?

【问题讨论】:

  • 在没有特定例外的情况下使用“包罗万象”except 子句通常是个坏主意。只需为其添加相关异常,您的KeyboardInterrupt 将不会被捕获。
  • 是的,我已经吸取了教训,但我很好奇,一旦我犯了错误,是否有任何方法可以摆脱。
  • 所以要明确一点:您当前正在运行一个无法使用 Ctrl+C 停止的会话,并且您想知道是否有任何方法可以在不更改代码的情况下挽救该会话?
  • 这是我不止一次犯的错误。我目前没有受苦,但我想知道问题的答案(可以挽救会话吗?)。我知道专门捕获 KeyboardInterrupt 的选项,但在测试想法的热潮中,我并不总是这样做,愚蠢地没想到会出现问题。

标签: python ipython


【解决方案1】:

您可以在except 子句中使用break 来摆脱循环。或者,您可以将 for 循环 inside 移动到 try/except 块中。如果您想为KeyboardInterrupt (ctrl+c) 做一件事,而为任何其他异常 做另一件事,您可以分别捕获。

for a in range(big_num):
  try:
    pass # Do your thing
  except KeyboardInterrupt:
    print("You pressed ctrl c...")
    break
  except Exception as e: # Any other exception
    print(str(e)) # Displays the exception without raising it
    break

try:
  for a in range(big_num):
    pass # Do your thing
except KeyboardInterrupt:
  print("You pressed ctrl c...")
except Exception as e:
  print(str(e))

【讨论】:

  • 如果我记得这样做的话,其中第一个对我的应用程序非常有用。一旦更基本的循环关闭并运行,我仍然想知道是否有任何追索权。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多