YENGtry
From OpenSimulator
(Difference between revisions)
Line 5: | Line 5: | ||
* on the finally block we place code that should run always. | * 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 | + | * throw keyword allows a catch to reissue the exception, so the engine handles it normally |
− | a try block must be follow by at one catch, one finally block or | + | a try block must be follow by at one catch or two of the following catch types, one finally block or all of those |
<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"> | ||
Line 15: | Line 15: | ||
to catch any available exception: | to catch any available exception: | ||
− | catch(exception ex) { } | + | <div style="background-color:#FFA500>catch(exception ex) { } </div> |
to catch script related exceptions | to catch script related exceptions | ||
Line 22: | Line 22: | ||
in both cases particular exception must be found by the message. | in both cases particular exception must be found by the message. | ||
+ | the catch blocks types are check by the order in source, if both needed scriptexception should be first. | ||
</div><br> | </div><br> |
Revision as of 17:06, 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 normally
a try block must be follow by at one catch or two of the following catch types, one finally block or all of those
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. the catch blocks types are check by the order in source, if both needed scriptexception should be first.
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; } }