Difference between revisions of "Try"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
(Add try-try-except-finally nesting case.)
Line 33: Line 33:
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
To handle exceptions with an <syntaxhighlight lang="pascal" enclose="none">except</syntaxhighlight> block '''and''' also run a <syntaxhighlight lang="pascal" enclose="none">finally</syntaxhighlight> block, nest one <syntaxhighlight lang="pascal" enclose="none">try</syntaxhighlight> block in another.
 +
 +
<syntaxhighlight lang=pascal>
 +
try
 +
  try
 +
    // code dealing with database that might generate an exception
 +
  except
 +
    // will only be executed in case of an exception
 +
    on E: EDatabaseError do
 +
      ShowMessage( 'Database error: '+ E.ClassName + #13#10 + E.Message );
 +
    on E: Exception do
 +
      ShowMessage( 'Error: '+ E.ClassName + #13#10 + E.Message );
 +
  end;
 +
finally
 +
  // clean up database-related resources
 +
end;
 +
</syntaxhighlight>
 +
  
 
== See also ==
 
== See also ==

Revision as of 02:31, 8 March 2021

Deutsch (de) English (en) español (es) suomi (fi) русский (ru)


Back to Reserved words.


The reserved word try is part of either a try..finally block or a try..except block.

If an exception occurs while executing the code between try and finally, execution resumes at finally. If no exception occurs, the code between finally and end will be executed also.

try
  // code that might generate an exception
finally 
  // will always be executed as last statements
end;

Whenever an exception occurs, the code between except and end will be executed.

try
  // code that might generate an exception
except
  // will only be executed in case of an exception
  on E: EDatabaseError do
    ShowMessage( 'Database error: '+ E.ClassName + #13#10 + E.Message );
  on E: Exception do
    ShowMessage( 'Error: '+ E.ClassName + #13#10 + E.Message );
end;

To handle exceptions with an except block and also run a finally block, nest one try block in another.

try
  try
    // code dealing with database that might generate an exception
  except
    // will only be executed in case of an exception
    on E: EDatabaseError do
      ShowMessage( 'Database error: '+ E.ClassName + #13#10 + E.Message );
    on E: Exception do
      ShowMessage( 'Error: '+ E.ClassName + #13#10 + E.Message );
  end;
finally
  // clean up database-related resources
end;


See also