14.3. Preventing Errors
There's no sure-fire
way to keep your scripts from misbehaving, but there
are a few problems that happen more often than
others. By keeping an eye out for these pitfalls, you can greatly
reduce the chance of your script crashing, hanging, or otherwise
misbehaving:
Stop infinite loops. Page Sidebar 8.1 has a tempting proposition: letting a
repeat statement run forever. Unfortunately, if
you do that, you won't be able to quit your script
without clicking the Stop button in Script Editoran unduly
harsh way to halt your code. The fix? Insert an exit
repeat command somewhere in your
repeat statement. That way,
there'll always be something to trigger your loop to
stop. Make sure an item exists before you try to use
it. Using the
exists command,
you can verify that an
item does, well, exist. Whenever you're scripting
tentative itemssay, a specific Finder window that might not be
around tomorrow, or a particular TextEdit
documentit's always a good idea to put your
commands inside an if/exists statement, so your
script doesn't end up sending commands to
nonexistent items. Don't convert between
incompatible data types.
The
as command lets you turn one kind of
information into anothersay, a number into a string. This is a
powerful tool for type-specific commands (like choose from
list, which won't accept anything but a
list), but be warned: some kinds of data don't
respond well to being coerced. Table 14-2 shows the
results of the most common coercions.
Table 14-2. What happens when you coerce different data types
Coerce
|
To string
|
To number
|
To list
|
To record
|
To alias
|
---|
From string
|
No change.
|
Works fine if you're coercing a quoted number (like
"2.5") into an AppleScript number.
On the other hand, your script will crash if you try to turn any
other string (like
"Welp") into a number.
|
Encases the string in curly braces, creating a single-item list. For
example, "Goat hut" would become
{"Goat hut"}.
|
Error
|
Works fine if you're coercing a string in
colon-separated path form (like "Macintosh
HD:Applications:") into an alias. However, if you
try to convert a nonpath string (like
"airplane") into an alias,
you'll be left with an error.
|
From number
|
Puts the number in quotation marks. 4 would become
"4", for example.
|
No change.
|
Encases the number in curly brackets, creating a single-item list.
For example, 7.2 would become {7.2}.
|
Error
|
Error
|
From list
|
Concatenates each item from the list, inserting
AppleScript's text item
delimiters
in between. For instance, if the text item delimiters were set to a
hyphen, and you converted
{"pizza", 4,
"me"} into a string,
you'd end up with
"pizza-4-me".
|
Works correctly if the list is only one item long, and that item is a
number (for example, {5} would become 5). On the
other hand, if you try to convert a multi-item list into a number,
you'll get an error.
|
No change.
|
Error
|
Works correctly if the list is a single item long, and that item is a
colon-separated path (see above). However, if your list is more than
one item longor the items aren't file
pathsyou'll get an error.
|
From record
|
Error
|
Error
|
Returns a list of just the values from the
record (Section 10.2). For instance,
{name:"José",
age:33} would become simply
{"José",
33}.
|
No change.
|
Error
|
From alias
|
Returns a string of the alias, in colon-separated form. For example,
an alias to your System folder would become the string
"Macintosh HD:System:".
|
Error
|
Encases the alias in curly braces, much like for strings (see above).
|
Error
|
No change.
|
 |