Interrupts and Aborts

"Interrupting Calculations" describes how you can interrupt a Wolfram Language computation by pressing appropriate keys on your keyboard.

In some cases, you may want to simulate such interrupts from within a Wolfram Language 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:
Click for copyable input

If you abort at any point during the evaluation of a Wolfram Language expression, the Wolfram Language 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:
Click for copyable input
The effect of the Abort is contained by CheckAbort, so b is printed:
Click for copyable input

When you construct sophisticated programs in the Wolfram Language, 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.

The Abort is saved up until AbortProtect is finished:
Click for copyable input
The CheckAbort sees the abort, but does not propagate it further:
Click for copyable input

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.