---
title: "Check"
language: "en"
type: "Symbol"
summary: "Check[expr, failexpr] evaluates expr, and returns the result, unless messages were generated, in which case it evaluates and returns failexpr. Check[expr, failexpr, {s1::t1, s2::t2, ...}] checks only for the specified messages. Check[expr, failexpr,  name] checks only for messages in the named message group."
keywords: 
- errors
- numerical overflow
- trapping errors
- iserr
- iserror
- ON_ERROR
- assert
- lasterror
- traperror
- try
canonical_url: "https://reference.wolfram.com/language/ref/Check.html"
source: "Wolfram Language Documentation"
related_guides: 
  - 
    title: "Messages"
    link: "https://reference.wolfram.com/language/guide/Messages.en.md"
  - 
    title: "Conditionals"
    link: "https://reference.wolfram.com/language/guide/Conditionals.en.md"
  - 
    title: "Package Development"
    link: "https://reference.wolfram.com/language/guide/PackageDevelopment.en.md"
  - 
    title: "Scoping Constructs"
    link: "https://reference.wolfram.com/language/guide/ScopingConstructs.en.md"
  - 
    title: "Robustness & Error Handling"
    link: "https://reference.wolfram.com/language/guide/RobustnessAndErrorHandling.en.md"
  - 
    title: "Tuning & Debugging"
    link: "https://reference.wolfram.com/language/guide/TuningAndDebugging.en.md"
related_workflows: 
  - 
    title: "Suppress Error Messages"
    link: "https://reference.wolfram.com/language/workflow/SuppressErrorMessages.en.md"
  - 
    title: "Set Up Error Checking and Messages in a Function"
    link: "https://reference.wolfram.com/language/workflow/SetUpErrorCheckingAndMessagesInAFunction.en.md"
  - 
    title: "Understand Error Messages"
    link: "https://reference.wolfram.com/language/workflow/UnderstandErrorMessages.en.md"
related_functions: 
  - 
    title: "Catch"
    link: "https://reference.wolfram.com/language/ref/Catch.en.md"
  - 
    title: "ConfirmQuiet"
    link: "https://reference.wolfram.com/language/ref/ConfirmQuiet.en.md"
  - 
    title: "Failsafe"
    link: "https://reference.wolfram.com/language/ref/Failsafe.en.md"
  - 
    title: "MessageList"
    link: "https://reference.wolfram.com/language/ref/MessageList.en.md"
  - 
    title: "$MessageList"
    link: "https://reference.wolfram.com/language/ref/$MessageList.en.md"
  - 
    title: "Message"
    link: "https://reference.wolfram.com/language/ref/Message.en.md"
  - 
    title: "Quiet"
    link: "https://reference.wolfram.com/language/ref/Quiet.en.md"
  - 
    title: "$MessageGroups"
    link: "https://reference.wolfram.com/language/ref/$MessageGroups.en.md"
  - 
    title: "Indeterminate"
    link: "https://reference.wolfram.com/language/ref/Indeterminate.en.md"
  - 
    title: "TimeConstrained"
    link: "https://reference.wolfram.com/language/ref/TimeConstrained.en.md"
  - 
    title: "CheckAbort"
    link: "https://reference.wolfram.com/language/ref/CheckAbort.en.md"
  - 
    title: "Assert"
    link: "https://reference.wolfram.com/language/ref/Assert.en.md"
related_tutorials: 
  - 
    title: "Messages"
    link: "https://reference.wolfram.com/language/tutorial/TextualInputAndOutput.en.md#12413"
  - 
    title: "Loops and Control Structures"
    link: "https://reference.wolfram.com/language/tutorial/EvaluationOfExpressions.en.md#11091"
---
# Check

Check[expr, failexpr] evaluates expr, and returns the result, unless messages were generated, in which case it evaluates and returns failexpr. 

Check[expr, failexpr, {s1::t1, s2::t2, …}] checks only for the specified messages. 

Check[expr, failexpr, "name"] checks only for messages in the named message group.

## Details

* ``Check`` has attribute ``HoldAll``.

* ``Check`` does not test for messages that have been switched off using ``Off``, or by uses of ``Quiet`` that occur inside it.

* The operation of ``Check`` is not affected by being enclosed inside ``Quiet``.

* In ``Check[expr, failexpr, "name"]``, possible named message groups are given by ``\$MessageGroups``.

* Explicit message names of the form ``s::t`` can be mixed with named message groups.

---

## Examples (10)

### Basic Examples (2)

Return ``err`` when any message is issued:

```wl
In[1]:= Check[1 ^ 0, err]

Out[1]= 1

In[2]:= Check[0 ^ 0, err]
```

Power::indet: Indeterminate expression 0^0 encountered.

```wl
Out[2]= err
```

---

Check only for specific messages:

```wl
In[1]:= Check[Sin[0 ^ 0], err, Sin::argx]
```

Power::indet: Indeterminate expression 0^0 encountered.

```wl
Out[1]= Indeterminate

In[2]:= Check[Sin[x, y], err, Sin::argx]
```

Sin::argx: Sin called with 2 arguments; 1 argument is expected.

```wl
Out[2]= err
```

### Scope (3)

Check for a message from a specific function:

```wl
In[1]:= Check[0 ^ 0, "message issued", Power::indet]
```

Power::indet: Indeterminate expression 0^0 encountered.

```wl
Out[1]= "message issued"
```

The ``ArcTan::indet`` is not caught by ``Check`` :

```wl
In[2]:= Check[ArcTan[0, 0], "message issued", Power::indet]
```

ArcTan::indet: Indeterminate expression ArcTan[0,0] encountered.

```wl
Out[2]= Indeterminate
```

Use the head ``General`` to catch the message from any function:

```wl
In[3]:= Check[ArcTan[0, 0], "message issued", General::indet]
```

ArcTan::indet: Indeterminate expression ArcTan[0,0] encountered.

```wl
Out[3]= "message issued"
```

---

Catch multiple messages:

```wl
In[1]:= Check[Sin[0 ^ 0], err, {General::infy, General::indet, General::argx}]
```

Power::indet: Indeterminate expression 0^0 encountered.

```wl
Out[1]= err

In[2]:= Check[1 / 0, err, {General::infy, General::indet, General::argx}]
```

Power::infy: Infinite expression 1/0 encountered.

```wl
Out[2]= err
```

---

Check for a message from a named group:

```wl
In[1]:= f = Compile[{{x, _Real}}, x]

Out[1]=
CompiledFunction[{11, 14.1, 5470}, {_Real}, {{3, 0, 0}, {3, 0, 0}}, {}, {0, 0, 1, 0, 0}, {{1}}, 
 Function[{x}, x], Evaluate]

In[2]:= Check[f[I], "message issued", "Compiler"]
```

CompiledFunction::cfsa: Argument I at position 1 should be a machine-size real number.

```wl
Out[2]= "message issued"

In[3]:= Check[f[I], "message issued", "Graphics"]
```

CompiledFunction::cfsa: Argument I at position 1 should be a machine-size real number.

```wl
Out[3]= I
```

### Applications (1)

Use ``Check`` and ``Quiet`` to provide values for arguments where a function is not applicable:

```wl
In[1]:= f[x_] := Quiet[Check[StringTake[x, 4], x, StringTake::take], StringTake::take]
```

This function simply returns its argument if its argument is a string of length less than four:

```wl
In[2]:= f /@ {"abcdef", "ab", "eg3j"}

Out[2]= {"abcd", "ab", "eg3j"}
```

Without the ``Check`` and ``Quiet``, the middle input would have returned unevaluated with a message:

```wl
In[3]:= StringTake["ab", 4]
```

StringTake::take: Cannot take positions 1 through 4 in "ab".

```wl
Out[3]= StringTake["ab", 4]
```

### Properties & Relations (3)

``Check`` does not prevent messages from being issued:

```wl
In[1]:= Check[Sin[x, y], "too many", General::argx]
```

Sin::argx: Sin called with 2 arguments; 1 argument is expected.

```wl
Out[1]= "too many"
```

---

``Check`` does not detect messages suppressed with a inner ``Quiet`` :

```wl
In[1]:= Check[Quiet[1 / 0], error]

Out[1]= ComplexInfinity
```

However, the operation of ``Check`` is not affected by being inside ``Quiet`` :

```wl
In[2]:= Quiet[Check[1 / 0, error]]

Out[2]= error
```

---

``Check`` does not report messages that have been turned off:

```wl
In[1]:= Off[Power::infy]

In[2]:= Check[1 / 0, "message issued"]

Out[2]= ComplexInfinity
```

Restore the message:

```wl
In[3]:= On[Power::infy]
```

### Possible Issues (1)

A nested ``Check`` does not silence a message for an enclosing ``Check`` :

```wl
In[1]:= Check[Check[1 / 0, inner, Power::infy], outer, Power::infy]
```

Power::infy: Infinite expression 1/0 encountered.

```wl
Out[1]= outer
```

Use an intermediate ``Quiet`` to prevent the enclosing ``Check`` from reacting to the message:

```wl
In[2]:= Check[Quiet[Check[1 / 0, inner, Power::infy], Power::infy], outer, Power::infy]

Out[2]= inner
```

## See Also

* [`Catch`](https://reference.wolfram.com/language/ref/Catch.en.md)
* [`ConfirmQuiet`](https://reference.wolfram.com/language/ref/ConfirmQuiet.en.md)
* [`Failsafe`](https://reference.wolfram.com/language/ref/Failsafe.en.md)
* [`MessageList`](https://reference.wolfram.com/language/ref/MessageList.en.md)
* [`\$MessageList`](https://reference.wolfram.com/language/ref/$MessageList.en.md)
* [`Message`](https://reference.wolfram.com/language/ref/Message.en.md)
* [`Quiet`](https://reference.wolfram.com/language/ref/Quiet.en.md)
* [`\$MessageGroups`](https://reference.wolfram.com/language/ref/$MessageGroups.en.md)
* [`Indeterminate`](https://reference.wolfram.com/language/ref/Indeterminate.en.md)
* [`TimeConstrained`](https://reference.wolfram.com/language/ref/TimeConstrained.en.md)
* [`CheckAbort`](https://reference.wolfram.com/language/ref/CheckAbort.en.md)
* [`Assert`](https://reference.wolfram.com/language/ref/Assert.en.md)

## Tech Notes

* [Messages](https://reference.wolfram.com/language/tutorial/TextualInputAndOutput.en.md#12413)
* [Loops and Control Structures](https://reference.wolfram.com/language/tutorial/EvaluationOfExpressions.en.md#11091)

## Related Guides

* [`Messages`](https://reference.wolfram.com/language/guide/Messages.en.md)
* [`Conditionals`](https://reference.wolfram.com/language/guide/Conditionals.en.md)
* [Package Development](https://reference.wolfram.com/language/guide/PackageDevelopment.en.md)
* [Scoping Constructs](https://reference.wolfram.com/language/guide/ScopingConstructs.en.md)
* [Robustness & Error Handling](https://reference.wolfram.com/language/guide/RobustnessAndErrorHandling.en.md)
* [Tuning & Debugging](https://reference.wolfram.com/language/guide/TuningAndDebugging.en.md)

## Related Workflows

* [Suppress Error Messages](https://reference.wolfram.com/language/workflow/SuppressErrorMessages.en.md)
* [Set Up Error Checking and Messages in a Function](https://reference.wolfram.com/language/workflow/SetUpErrorCheckingAndMessagesInAFunction.en.md)
* [Understand Error Messages](https://reference.wolfram.com/language/workflow/UnderstandErrorMessages.en.md)

## History

* Introduced in 1988 (1.0) \| [Updated in 2007 (6.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn60.en.md) ▪ [2008 (7.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn70.en.md)