Try
Calling Convention
Call
local r[,...] = sl.try(func,hndlr)
Args
func is a function hndlr is a function
Results
r0...rN results returned from func or r0...rN results returned from hndlr, if func raises an error or r0...rN results returned from error handling callback, if set and enabled, and hndlr reraises the error (see below) or ERR, eref if hndlr reraises error and inline handling enabled (see below)
Usage Example
local sl = dofile(getinstalldir()..'/lib/simplelib.lua') sl.slredirect('i') local f = function() local a = {} a = a + 1 + 'a' return a end local h = function(err) if type(err) == 'string' then return 'error '..tostring(err) else local e = sl.geterror(err) return e._errmsg end end print(sl.try(f,h))
--> 'error ...\scripts\test00.lua:3: attempt to perform arithmetic on local 'a' (a table value)'
Description
try is provided as a library wrapper for pcall which integrates library and script error handling. If the provided function func executes without generating any errors then its results are mirrored as the results of the try call. If an error is raised within func, then the function hndlr is called with a single argument, err, either a numeric reference to an error table that can be retrieved via geterror, or a string description of the error.
If hndlr raises an error (either an intentional reraising using error, or a novel error), then further error handling is passed to the library and accomplished according to the reporting mode in effect: reraise to system (default) resulting in the script halting, inlined and allowing execution to continue, or using a library-wide user specified callback function. The last two options are useful for designing scripts that fail gracefully (or, at least silently, lolz). See [error reporting modes] for more information.
try is intended to be used to handle errors in user functions that employ library methods. In most instances, try should not be used directly on library calls, as they already have an internal form of try applied to them, and this will simply multiply the number of error messages recorded. Notable exceptions are the luo, macro, and str table methods.
Upon Error
If try doesn't receive two valid functions as arguments, a library error is raised and handled according to the current redirection mode.