Mathematica Journal
Volume 9, Issue 4


In This Issue
Tricks of the Trade
In and Out
Trott's Corner
New Products
New Publications
News Bulletins
New Resources

Download This Issue 

About the Journal
Editorial Policy
Staff and Contributors
Back Issues
Contact Information

In and Out
Edited by Paul Abbott

Aborting Messages

Q: I would like to abort a computation whenever an error occurs, avoiding evaluation of the subsequent expressions within a cell. For example, in the following computation, I would like to avoid computing after generates an error message.

One can immediately abort a computation by replacing the default for $Messages with a call to Abort.

However, now when an error occurs, the computation is aborted without any message.

Is there a way to display the message and then abort?

A: Omega Consulting ( answers: Using is quite a creative trick. Unfortunately, you cannot use it and also get the message. $Messages is a list of OutputStreams that any messages are written to. First, let us restore $Messages to its default value.

If the OutputStream is stdout, then you get the normal message. If it is an OutputStream to a file, then it is written to that file. You might think that the following would work:

However, it does not.

Why not? Because $Messages is evaluated before the messages are actually sent to the streams. Again, we restore $Messages to its default value.

Still there is another trick we can use, called a trap. A message is created whenever the Message function is called. We can redefine this function by unprotecting it.

Now we create a global variable, $AbortMessage, to indicate what we want to do with a Message. When the variable is True, we want to deviate from the default behavior. When False, we want the default behavior (i.e., a message).

Now we add a definition for when the variable is True. It calls Message with the variable set to False (creating a message) and then aborts.

To be safe we reprotect Message.

Now we try it.

About Mathematica | Download Mathematica Player
© Wolfram Media, Inc. All rights reserved.