如何捕获TimeConstrained生成的中断?

Ale*_*kov 5 wolfram-mathematica

Mathematica具有CheckAbort允许捕获和处理用户生成和编程Abort的功能.但它不允许赶上通过这样的功能产生例如中断TimeConstrainedMemoryConstrained:

TimeConstrained[CheckAbort[Pause[100], Print["From CheckAbort"]], 1]
Run Code Online (Sandbox Code Playgroud)

(不打印"From CheckAbort").

有没有办法在Mathematica中捕获这样的中断?

编辑:我知道第三个参数,TimeConstrainedMemoryConstrained允许在中断的情况下评估一些代码,但这种方式不是我需要的:我需要一种方法来完全处理我的函数内部的这些中断,允许用户不关心它内部.

PS我之所以需要这个,是因为我有一个创建MathLink对象的函数,在任何中断或中止的情况下必须关闭,但在其他情况下则不能.

Dan*_*lau 11

这种结构以未记录的形式提供.

Internal`WithLocalSettings[
  preprocessing,
  code,
  postprocessing]
Run Code Online (Sandbox Code Playgroud)

将导致后处理在从中止或各种类型的跳转返回之前发生.

也可以看看:

Mathematica的可靠清理

使用mathematica导入大文件/数组

Daniel Lichtblau

  • 如果引入"完成"标志,这可能有效,例如``TimeConstrained [Module [{done = False},Internal`WithLocalSettings [Print @"start",Pause [100]; done = True,If [!done,Print @"中断!"]]],5]`` (2认同)