Catching Errors

We’ve mentioned a few times by now that you should always test whether it’s safe to let a script do something. Two of the examples we’ve seen are the following:

if (app.selection[0].constructor.name != "InsertionPoint")
if (myString == "nonsense")

These two checks are specific: the first one tests whether a selection is an insertion point; in the second one we make sure that we do something only if the variable myString has a particular value. We use specific tests like these when we are well aware of what could go wrong.

However, we often don’t know what could go wrong, or we might run into problems because of several reasons. Trying to list the possible error conditions could be tedious, and you never know if you’ve got them all. To deal with these situations, you can use JavaScript’s general error catcher. Let’s force an error. Place the cursor in some text in an InDesign document, then run this script:

try
    {
    app.selection[0].contents = 3
    }
catch (myError)
    {
    alert (myError);
    exit ()
    }

What we want to do goes in the block under try. Any error that occurs during the execution of the clause(s) in the try block are caught by the catch statement and the script passes control to the script code in the catch block.

Here, we’ve chosen to display the error and to halt the script. You could also decide that at some stage in the script something could go wrong, but you’re not interested to know the problem: all you care about is that the script gets on with it. In that case you ...

Get Scripting InDesign CS3/4 with JavaScript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.