3.3 KiB
3.3 KiB
Catch Exceptions
{{#include ../links.md}}
When an [exception] is thrown via a [throw
] statement, evaluation of the script halts
and the [Engine
] returns with Err(Box<EvalAltResult::ErrorRuntime>)
containing the
exception value that has been thrown.
It is possible, via the try
... catch
statement, to catch exceptions, optionally
with an error variable.
// Catch an exception and capturing its value
try
{
throw 42;
}
catch (err) // 'err' captures the thrown exception value
{
print(err); // prints 42
}
// Catch an exception without capturing its value
try
{
print(42/0); // deliberate divide-by-zero exception
}
catch // no error variable - exception value is discarded
{
print("Ouch!");
}
// Exception in the 'catch' block
try
{
print(42/0); // throw divide-by-zero exception
}
catch
{
print("You seem to be dividing by zero here...");
throw "die"; // a 'throw' statement inside a 'catch' block
// throws a new exception
}
Re-Throw Exception
Like the try
... catch
syntax in most languages, it is possible to re-throw
an exception within the catch
block simply by another [throw
] statement without
a value.
try
{
// Call something that will throw an exception...
do_something_bad_that_throws();
}
catch
{
print("Oooh! You've done something real bad!");
throw; // 'throw' without a value within a 'catch' block
// re-throws the original exception
}
Catchable Exceptions
Many script-oriented exceptions can be caught via try
... catch
:
Error type | Error value |
---|---|
Runtime error thrown by a [throw ] statement |
value in throw statement |
Other runtime error | error message [string] |
Arithmetic error | error message [string] |
Variable not found | error message [string] |
[Function] not found | error message [string] |
[Module] not found | error message [string] |
Unbound [this ] |
error message [string] |
Data type mismatch | error message [string] |
Assignment to a calculated/constant value | error message [string] |
[Array]/[string] indexing out-of-bounds | error message [string] |
Indexing with an inappropriate data type | error message [string] |
Error in a dot expression | error message [string] |
for statement without an type iterator |
error message [string] |
Error in an in expression |
error message [string] |
Data race detected | error message [string] |
Non-Catchable Exceptions
Some exceptions cannot be caught:
- Syntax error during parsing
- System error - e.g. script file not found
- Script evaluation metrics over safety limits
- Function calls nesting exceeding [maximum call stack depth]
- Script evaluation manually terminated