YENGtry
From OpenSimulator
(Difference between revisions)
												
			| Line 11: | Line 11: | ||
<div style="background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid">  | <div style="background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid">  | ||
| − | '''at this time catch   | + | '''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.  | ||
| + | |||
</div><br>  | </div><br>  | ||
Revision as of 17:02, 19 September 2020
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;
    }
}