Interrupts and Aborts
"Interrupting Calculations" describes how you can interrupt a
Mathematica computation by pressing appropriate keys on your keyboard.
In some cases, you may want to simulate such interrupts from within a
Mathematica program. In general, executing
Interrupt[] has the same effect as pressing interrupt keys. On a typical system, a menu of options is displayed, as discussed in
"Interrupting Calculations".
| Interrupt[] | interrupt a computation |
| Abort[] | abort a computation |
| CheckAbort[expr,failexpr] | evaluate expr and return the result, or failexpr if an abort occurs |
| AbortProtect[expr] | evaluate expr, masking the effect of aborts until the evaluation is complete |
Interrupts and aborts.
The function
Abort[] has the same effect as interrupting a computation, and selecting the
abort option in the interrupt menu.
You can use
Abort[] to implement an "emergency stop" in a program. In almost all cases, however, you should try to use functions like
Return and
Throw, which lead to more controlled behavior.
Abort terminates the computation, so only the first Print is executed.
| Out[1]= |  |
|
If you abort at any point during the evaluation of a
Mathematica expression,
Mathematica normally abandons the evaluation of the whole expression, and returns the value
$Aborted.
You can, however, "catch" aborts using the function
CheckAbort. If an abort occurs during the evaluation of
expr in
CheckAbort[expr, failexpr], then
CheckAbort returns
failexpr, but the abort propagates no further. Functions like
Dialog use
CheckAbort in this way to contain the effect of aborts.
CheckAbort catches the abort, prints c and returns the value aborted.
| Out[2]= |  |
|
When you construct sophisticated programs in
Mathematica, you may sometimes want to guarantee that a particular section of code in a program cannot be aborted, either interactively or by calling
Abort. The function
AbortProtect allows you to evaluate an expression, saving up any aborts until after the evaluation of the expression is complete.
| Out[4]= |  |
|
The CheckAbort sees the abort, but does not propagate it further. |
Even inside
AbortProtect,
CheckAbort will see any aborts that occur, and will return the appropriate
failexpr. Unless this
failexpr itself contains
Abort[], the aborts will be "absorbed" by the
CheckAbort.