YENGtry
From OpenSimulator
try, catch and finally allow to handle some exceptions without getting the script killed.
- on the try block we place the code we want to run protected.
- on the catch block place code to handle the exception
- on the finally block we place code that should run always.
- throw keyword allows a catch to reissue the exception, so the engine handles it normaly
a try block must be follow by at one catch, one finally block or both
at this time there are only 2 types of cache blocks
to catch any available exception:
catch(exception ex) { }
to catch script related exceptions
catch(scriptexception ex) { }
in both cases particular exception must be found by the message.
There can not be any llResetScript or osResetAllScripts inside any of this blocks. script will compile but fail with a severe runtime error
silly example
touch_start(integer nn)
{
integer a = 0;
try
{
llSay(0,"try");
float c = 1 / a;
}
catch(exception ex)
{
if(yExceptionMessage(ex) == "Division by Zero")
llSay(0,"Where did you learn math?");
else
throw;
}
finally
{
llSay(0,"finaly");
}
}
detect no ossl permission
touch_start(integer nn)
{
try
{
key agent = llDetectedKey(0);
osForceOtherSit(agent);
}
catch(exception ex)
{
string message = yExceptionMessage(ex);
if(osStringStartsWith(message,"ossl permission error", TRUE))
llSay(0,"You need to enable osForceOtherSit on osslEenable.ini");
else
throw;
}
}