繁体   English   中英

使用异常捕获器中断 Python 块

[英]Interrupting Python blocks with exception catchers

这似乎是一个非常明显但令人讨厌的问题。 考虑这里的代码块 -

for i in tqdm.notebook.tqdm(range(int(3*len(structures)/4))):
    try:
        is_mal=np.array([1.]) if 'Malware' in structure_info[i] else np.array([0.])
        target=parse_Structure(file=structures[i])
        target=np.reshape(target.get_vector(),(-1,1))
        is_mal=np.reshape(is_mal,(-1,1))
        vectors=np.concatenate((vectors,target), axis=1)
        labels=np.concatenate((labels,is_mal), axis=1)
    except:
        print(i)

无论如何,代码无关紧要。 但我有一个简单的问题。

在我的 Colab Notebook 在线环境中运行此程序时,当我想在循环中间调试某些内容时,我只是尝试中断执行。

这导致打印循环所在的索引,显然中断被视为异常。 虽然我同意循环完美地执行 try-catch 块这一事实,但我也想严重中断执行。

如何在不重新启动运行时中断此块的执行?

您可以在except块内引发一个新异常以继续传递它:

try:
  <code>
except:
  raise Exception

如果要重新引发已捕获的相同异常:

try:
  <code>
except Exception as E:
  raise E

这会将异常传递给下一个处理程序,如果没有其他尝试/异常,它将停止整个脚本。

如果您被Exception未捕获的内容(例如 Ctrl-C)打断,您可以将Exception替换为BaseExceptionKeyboardInterrupt 请注意,后面这两个应该很少被全面捕获并且不会在生产环境中重新引发,因为这可能会使再次实际退出程序变得很麻烦。

有关异常的更多信息: https://docs.python.org/3/library/exceptions.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM