Name

try [on error] [number | from | partial result | to] end[error | try]

Examples

This example traps any errors caused by invalid data entered by the user, and then goes on its merry way without explicitly responding to any errors. try statements can be used inside and outside of your own subroutines, script objects, and libraries; they can nest other statements such as if, repeat, and tell. In fact, your entire script can run inside of a try statement, and the try block can contain other try statements:

try
   set userReply to the text returned of¬
      (display dialog "Try your best to enter a number." default answer¬ 
      "")
   set invalidNum to false
   set userReply to userReply as real
on error
   set invalidNum to true
end try
if invalidNum then
   display dialog "That's the best you can do?!"
else
   display dialog "thanks for entering: " & userReply
end if

This script politely asks the user for a number; it sets the reply to the variable userReply. This variable is then coerced from a string to a real type, which raises an error if userReply is not a valid number. For example, “a10” couldn’t be converted to a valid number. AppleScript displays this error and stops running the script if we do not catch it in the try block. If the error is raised, the statements that appear between on error and end try execute. In this case, the script sets a boolean variable invalidNum to true. Remember, the script does not have to use the on error statement part of try in Mac OS 9 or OS X. It can simply use a try block to prevent any errors from crashing the script, then go on blithely executing the rest of the code. The error handler of the try statement contains five variables from which you can obtain information about any errors. The following code shows two of the many ways that you can use try. The first demonstration catches but then skips over any errors that might be raised while it executes its code. The second use of try deploys the on error handler to grab all the data that it can about the error and display it to the user:

tell application "SoundJam™ MP"
   try
      activate (* will raise an error if SoundJam isn't on the computer, 
      but the program will just keep going *)
   end try
   try
      set allPlay to playlist windows -- a list of playlists
      repeat with pl in allPlay
         if (name of pl) is "tranceControl" then set mainPlay to pl
      end repeat
      set trackNameList to name of (tracks of mainPlay)
      set trackMsg to ""
      on error errMsg number errNum from objErr partial result errList¬
      to  errClass 
      (* display the error message, error number, the object that is the 
      source of the error, any partial results, and class information *)
         display dialog errMsg & ": " & errNum & return & "Source of¬ 
         error   was: " & objErr & return & "Here are any partial¬ 
         results: " &  errList & return & "If coercion failure it¬
         involved a coercion to: " & errClass
     return -- exit the program
   end try
   repeat with nam in trackNameList
      set trackMsg to trackMsg & return & nam
   end repeat
   display dialog "The MP3 track names in the main playlist are: " &¬ 
   return & trackMsg
end tell

In the prior example, if any statements in the second try block raise an error, then the on error handler displays error information using all five parameters of on error. AppleScript gives these parameters a value (e.g., the error description and number) for you if any errors are raised. The values for the partial list and to parameters are empty lists if there are no partial results or coercion problems associated with the error. Here’s a rundown of the five optional on error parameters: