Contenu principal

try, catch

Exécuter des instructions et intercepter les erreurs qui en résultent

Syntaxe

try
   statements
catch exception
   statements
end

Description

try statements, catch statements end exécute les instructions du bloc try et intercepte les erreurs qui en résultent dans le bloc catch. Cette approche vous permet de remplacer le comportement par défaut en cas d’erreur pour un ensemble d’instructions de programme. Si une instruction d’un bloc try génère une erreur, le contrôle du programme passe immédiatement au bloc catch qui contient vos instructions de traitement d’erreur.

exception est un objet MException qui vous permet d’identifier l’erreur. Le bloc catch affecte l’objet d’exception actuel à la variable exception.

Les blocs try et catch peuvent tous les deux contenir des instructions try/catch imbriquées.

exemple

Exemples

réduire tout

Créez deux matrices impossibles à concaténer verticalement.

A = rand(3);
B = ones(5);

C = [A; B];
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Utilisez try/catch pour afficher plus d’informations sur les dimensions.

try
   C = [A; B];
catch ME
   if (strcmp(ME.identifier,'MATLAB:catenate:dimensionMismatch'))
      msg = ['Dimension mismatch occurred: First argument has ', ...
            num2str(size(A,2)),' columns while second has ', ...
            num2str(size(B,2)),' columns.'];
        causeException = MException('MATLAB:myCode:dimensions',msg);
        ME = addCause(ME,causeException);
   end
   rethrow(ME)
end 
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Caused by:
    Dimension mismatch occurred: First argument has 3 columns while second has 5 columns.

Si les dimensions des matrices ne sont pas compatibles, MATLAB® affiche plus d’informations sur cette incompatibilité. Toutes les autres erreurs s’affichent de la manière habituelle.

Interceptez toute exception générée par un appel à la fonction inexistante notaFunction. Si une exception se produit, générez un avertissement et affectez la valeur 0 à la sortie.

try
    a = notaFunction(5,6);
catch
    warning('Problem using function.  Assigning a value of 0.');
    a = 0;
end
Warning: Problem using function.  Assigning a value of 0.

À lui seul, l’appel à notaFunction génère une erreur. Si vous utilisez try et catch, ce code intercepte toute exception et la transforme en avertissement, ce qui permet à MATLAB de continuer à exécuter les commandes suivantes.

Utilisez try/catch pour traiter différents types d’erreurs de diverses manières.

  • Si la fonction notaFunction n’est pas définie, générez un avertissement au lieu d’une erreur et affectez la valeur NaN à la sortie.

  • Si notaFunction.m existe mais qu’il s’agit d’un script et non d’une fonction, générez un avertissement au lieu d’une erreur, exécutez le script et affectez la valeur 0 à la sortie.

  • Si MATLAB génère une erreur pour toute autre raison, relancez l’exception.

try
    a = notaFunction(5,6);
catch ME
    switch ME.identifier
        case 'MATLAB:UndefinedFunction'
            warning('Function is undefined.  Assigning a value of NaN.');
            a = NaN;
        case 'MATLAB:scriptNotAFunction'
            warning(['Attempting to execute script as function. '...
                'Running script and assigning output a value of 0.']);
            notaFunction;
            a = 0;
        otherwise
            rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of NaN. 

Conseils

  • Vous ne pouvez pas utiliser plusieurs blocs catch dans un bloc try mais vous pouvez imbriquer des blocs try/catch complets.

  • Contrairement à d’autres langages, MATLAB ne permet pas d’utiliser un bloc finally dans les instructions try/catch.

Capacités étendues

développer tout

Historique des versions

Introduit avant R2006a

développer tout