Version 1.4.3.40 introduced Try-Catch statements and made the way that ZPE handles errors much simpler, leading to an open function for throwing all errors. With the introduction of the Try-Catch statement, ZPE 1.4.3.40 opened a whole world of possibilities for throwing errors.
When an error is thrown and a Try-Catch statement surrounds this, the error is handled by the program. The following example shows a list of two elements but the user attempts to access a third, causing an error.
$l = [32, 55] try //Attempt to access third element list_get_at_index($l, 2) end try
Since a third element does not exist the program would crash, but since it is wrapped in the Try statement (line 2), the program execution continues. In this next example, the program does not just continue but it takes a different route down the Catch route.
$l = [32, 55] try //Attempt to access third element list_get_at_index($l, 2) catch std_err("Attempted to access an invalid index") end try
Since most built-in functions have error messages that they send upward, it is useful to observe these messages. To do this, the Catch statement is given a variable. This variable will be given a value if the error occurs and will be visible only within the Catch statement.
$l = [32, 55] try //Attempt to access third element list_get_at_index($l, 2) catch($exception) //Version 1.7.x onwards std_err($exception->get_message()) //Earlier than version 1.7.x //std_err($exception()) end try
In this case, the application is designed to print the error message found in $exception
to the
standard error output stream.
If $exception
was defined before the Catch statement, it will automatically be reset to it's value
that was stored in it after the Catch statement closes.
Finally, as with most statements in YASS, Try-Catch statements can use braces like Java and C instead of the
end try
based structure. The following is the same program with the brace structure:
$l = [32, 55] try { //Attempt to access third element list_get_at_index($l, 2) } catch($exception->get_message()) { std_err($exception) }