Throw

Throw[value]

stops evaluation and returns value as the value of the nearest enclosing Catch.

Throw[value,tag]

is caught only by Catch[expr,form], where tag matches form.

Details

  • You can use Throw and Catch to exit functions such as Nest, Fold, FixedPoint, and Scan.
  • tag can be any expression.
  • tag in Throw[value,tag] is reevaluated every time it is compared to form in Catch[expr,form].
  • An error is generated and an unevaluated Throw is returned if there is no appropriate enclosing Catch to catch the Throw.

Examples

open allclose all

Basic Examples  (3)

Exit to the enclosing Catch as soon as Throw is evaluated:

Define a function that can "throw an exception":

The result of Catch is just what is thrown by Throw:

Use Throw to exit a loop when a criterion is satisfied:

Scope  (4)

Throw works inside essentially any function:

Use Throw to throw any type of expression:

Throw is caught by the nearest enclosing Catch:

As soon as the first Throw is evaluated, it exits to the enclosing Catch:

Generalizations & Extensions  (3)

Catch Throw with tag u:

The inner Catch catches Throw:

The outer Catch catches Throw:

Keep the tag local:

Applications  (3)

Find the next prime after 1010:

Find the first power of 17 equal to 1 mod 19:

Stop if an iteration gets too large:

Properties & Relations  (1)

Use Check to throw an exception if a message is generated:

Possible Issues  (2)

Throw requires Catch:

Using Throw can affect the structure of what is returned by a function:

Introduced in 1988
 (1.0)
 |
Updated in 1996
 (3.0)