2.4.1.4 X-Function Exception HandlingXF-Exception-Handling
ExceptionX-Function ExceptionThe example below illustrates trapping an X-Function error with LabTalk, so that an X-Function call that is likely to generate an error does not break your entire script.
For X-Functions that do not return an error code, two functions exist to check for errors in the last executed X-Function: xf_get_last_error_code() and xf_get_last_error_message()$. These functions should be used in situations where the potential exists that a particular X-Function could fail.
In this example, the user is given the option of selecting a file for import, but if that import fails (e.g. user picked file type inappropriate for the import) we need to handle the remaining code.
dlgfile gr:=*.txt; // Get the file name and path from user
impasc -se; // Need to use -se switch for execution to continue, see note below
if( 0 != xf_get_last_error_code() )
{
strError$ = "XFunction Failed: " + xf_get_last_error_message()$;
type strError$;
break 1; // Stop execution
}
// Data import probably succeeded, so our script can continue
type continuing...;
Note the use of the general X-Function option -se to suppress error messages. You can also use -sl to suppress error logging and -sb to suppress both. It is necessary to use one of these options in order for script execution to continue to the next line when the X-Function call fails.
Looping Over to Find Peaks
In the following example, we loop over all columns in a worksheet to find peaks. If no peak is found in a particular column, the script continues with the rest of the columns. It is assumed here that a worksheet with suitable data is active.
//import data
newbook;
string fn$=system.path.program$ + "Samples\curve fitting\Asymmetric Gaussian.dat";
impasc fname:=fn$ ;
//loop over all columns
for(int ii=1; ii<=wks.ncols; ii++)
{
// Find peak in current column, suppress error message from XF
Dataset mypeaks;
pkfind $(ii) ocenter:=mypeaks -se; // Need to use -se for execution to continue
// Check to see if XF failed
if( 0 != xf_get_last_error_code() )
{
type "Failed on column $(ii): %(xf_get_last_error_message()$)";
}
else
{
type Found $(mypeaks.getsize()) peaks in column $(ii);
}
}
|