Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2025.0.0 - English


try

beginning of try block in try-catch control instruction

catch

beginning of catch block in try-catch control instruction

Syntax

try
    statements
catch
    statements
end

Description

The try-catch control instruction can be used to manage codes that could possibly generate errors.

When a try-catch control instruction is executed, normally only the statements between the try and catch keywords are executed. However, if an error occurs during execution of any of these statements, the error is recorded, the remaining statements up to the catch keyword are skipped and the statements between the catch and end keywords are executed using the default error handling mode.

The recorded error can be retrieved using the lasterror function.

The catch statements as well as the catch keyword can be omitted if no alternative statements are given.

Note that one can also use the execstr function with 'errcatch' argument for error handling. This can be particularly useful for handling syntactical errors.

Note also that try-catch is more or less similar to:

if execstr("<try instructions>","errcatch")<>0 then
  <catch instructions>
end

It uses the same internal mechanism as "errcatch". It is the reason why execstr(...,"errcatch") cannot be included in try-catch control structures. This context is detected and produces a specific error message (this error is caught and stored like any other error if it is triggered in the try block).

However, try-catch control structures can be nested (see example 2 below).

Examples

// example 1
file_path=TMPDIR+'/wrong'
try
  u=mopen(file_path,'r')
  x=mget(10,'c',u)
catch
  disp(['file '+file_path+ ' cannot be read','using default values for x'])
  x=1:10
end
 [error_message,error_number]=lasterror(%t)
// example 2 (nested try/catch structures)
function nestedtry(a, b)
disp("START")
mprintf("\ta is %s\t\tb is %s\n",string(a),string(b))
try
  disp("try 1")
  try
    disp("try 2")
    z=a+1;  // err when string
  catch
    disp("catch 2")
    t=b+1;  // err when string
  end
  disp("after try 2")
catch
  disp("catch 1")
end
disp("after try 1 - THE END")
endfunction
nestedtry(1,1)
nestedtry("a string",1)
nestedtry(1,"a string")
nestedtry("a string","a string")

See also

  • error — reports a run time error
  • execstr — execute Scilab code in strings
  • if — keyword for conditional execution
  • lasterror — get last recorded error message

History

VersionDescription
6.0.0 try and catch are now protected: Assignments like try=1 or catch=2 are no longer possible.
Report an issue
<< then Control flow while >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 24 11:13:05 CEST 2024