CheckAbort[expr,failexpr]
计算 expr,如果发生一个异常结束,则返回 failexpr.
CheckAbort
CheckAbort[expr,failexpr]
计算 expr,如果发生一个异常结束,则返回 failexpr.
更多信息和选项
- 默认情况下,CheckAbort 会吸收其处理的任何用户中止(包括对 Abort[] 的调用),并且不会进一步传播它们.
- 关于 CheckAbort 是否吸收其处理的中止,可以通过选项 PropagateAborts 来改变,其设置如下:
-
Automatic 传播用户发起的中止以外的中止(包括对 Abort[] 的调用) True 传播所有中止 False 不传播任何中止 - CheckAbort 在 AbortProtect 内部工作. »
- CheckAbort 具有属性 HoldAll.
范例
打开所有单元 关闭所有单元范围 (3)
在 AbortProtect 内使用 CheckAbort 来检测中止:
AbortProtect[Abort[];CheckAbort[Echo["no abort"], Echo["yes abort"]];Echo["end of AbortProtect"]]TimeConstrained[AbortProtect[Pause[1];CheckAbort[Echo["no abort"], Echo["yes abort"]];Echo["end of AbortProtect"]], .5, "Timed out"]使用 PropagateAborts 控制在 CheckAbort 之后中止是继续还是终止:
AbortProtect[Abort[];CheckAbort[Echo["A1"], Echo["A2"], PropagateAborts -> True];
CheckAbort[Echo["B1"], Echo["B2"], PropagateAborts -> False];CheckAbort[Echo["C1"], Echo["c2"], PropagateAborts -> False];Echo["finished AbortProtect"]]在 TimeConstrained 内使用 CheckAbort 可选择在达到限制时跳过哪些部分:
TimeConstrained[CheckAbort[Pause[1];Echo["first"], Echo["second"], PropagateAborts -> False];Echo["finished CheckAbort"], .1]MemoryConstrained 也可以做同样的事:
MemoryConstrained[CheckAbort[Range[10 ^ 6];Echo["first"], Echo["second"], PropagateAborts -> False];Echo["finished CheckAbort"], 10 ^ 4]选项 (2)
PropagateAborts (2)
默认设置 Automatic 不在 CheckAbort 外部传播用户发起的中止:
CheckAbort[Abort[], Echo["check"], PropagateAborts -> Automatic];Echo["past CheckAbort"]使用设置 PropagateAbortsTrue 可强制中止持续到 CheckAbort 之后:
CheckAbort[Abort[], Echo["check"], PropagateAborts -> True];Echo["past CheckAbort"]TimeConstrained 创建的中止默认会被传播:
TimeConstrained[
CheckAbort[Pause[1], Echo["check"], PropagateAborts -> Automatic];Echo["past CheckAbort"], .1]使用设置 PropagateAbortsFalse 可阻止中止持续:
TimeConstrained[
CheckAbort[Pause[1], Echo["check"], PropagateAborts -> False];Echo["past CheckAbort"], .1]MemoryConstrained 创建的中止也类似:
MemoryConstrained[
CheckAbort[Range[10 ^ 6], Echo["check"], PropagateAborts -> Automatic];Echo["past CheckAbort"], 10 ^ 4]属性和关系 (5)
AbsoluteTiming[TimeConstrained[CheckAbort[Abort[], Pause[3];Echo["check"]], 0.1, Echo["constraint"]]]该参数被有效地封装在 AbortProtect 中:
AbsoluteTiming[TimeConstrained[CheckAbort[Abort[], AbortProtect[Pause[3];Echo["check"]]], 0.1, Echo["constraint"]]]CheckAbort 即使在包含在 AbortProtect 中的情况下也会启用并检测中止:
AbortProtect[
CheckAbort[Echo["before"];Abort[];Echo["after"],
Echo["check"]]]虽然在 CheckAbort 内部的计算被终止,AbortProtect 可运行到完成:
AbortProtect[
CheckAbort[Echo["before"];Abort[];Echo["after"],
Echo["check"]];Echo["passed CheckAbort"]]嵌套的 AbortProtect 将延迟中止,但不能阻止其被 CheckAbort 检测到:
CheckAbort[
AbortProtect[Echo["before"];Abort[];Echo["after"]],
Echo["check"]]如果在 CheckAbort 开始时有中止已经激活,则第一个参数将不会被计算:
TimeConstrained[AbortProtect[Pause[1];CheckAbort[Echo["first"], Echo["second"]];Echo["finished AbortProtect"]], .1]CheckAbort 可用于在计算被中断时进行清理运行:
f[x_] := Module[{y}, CheckAbort[$myFlag = True;If[EvenQ[x], y = 2x, Abort[]];$myFlag = False;y,
$myFlag = False;$Aborted
]
]即使对于产生中止的输入,$myFlag 也会被设置为 False:
f[3]$myFlagWithCleanup 以显著较少的代码达到相同目的:
g[x_] := WithCleanup[$myFlag = True, If[EvenQ[x], 2x, Abort[]],
$myFlag = False]g[3]$myFlag历史
1991年引入 (2.0) | 在以下年份被更新:2022 (13.2)
文本
Wolfram Research (1991),CheckAbort,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CheckAbort.html (更新于 2022 年).
CMS
Wolfram 语言. 1991. "CheckAbort." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2022. https://reference.wolfram.com/language/ref/CheckAbort.html.
APA
Wolfram 语言. (1991). CheckAbort. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/CheckAbort.html 年
BibTeX
@misc{reference.wolfram_2026_checkabort, author="Wolfram Research", title="{CheckAbort}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/CheckAbort.html}", note=[Accessed: 11-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_checkabort, organization={Wolfram Research}, title={CheckAbort}, year={2022}, url={https://reference.wolfram.com/language/ref/CheckAbort.html}, note=[Accessed: 11-August-2026]}