Main Content

try, catch

Eseguire le dichiarazioni e catturare gli errori risultanti

Sintassi

try
   statements
catch exception
   statements
end

Descrizione

try statements, catch statements end esegue le dichiarazioni nel blocco try e cattura gli errori risultanti nel blocco catch. Questo approccio consente di sovrascrivere il comportamento di errore predefinito per una serie di dichiarazioni del programma. Se una qualsiasi dichiarazione nel blocco try genera un errore, il controllo del programma passa immediatamente al blocco catch che contiene le dichiarazioni di gestione dell'errore.

exception è un oggetto MException che consente di identificare l’errore. Il blocco catch assegna l'oggetto eccezione corrente alla variabile in exception.

Sia il blocco try che il blocco catch possono contenere dichiarazioni try/catch annidate.

esempio

Esempi

comprimi tutto

Creare due matrici che non possono essere concatenate verticalmente.

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

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

Utilizzare try/catch per visualizzare ulteriori informazioni sulle dimensioni.

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.

Se le dimensioni della matrice non concordano, MATLAB® visualizza ulteriori informazioni sulla mancata corrispondenza. Tutti gli altri errori sono visualizzati come di consueto.

Catturare qualsiasi eccezione generata dalla chiamata alla funzione inesistente notaFunction. Se è presente un'eccezione, si emette un avviso e si assegna all'output il valore 0.

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.

Di per sé, la chiamata a notaFunction presenta un errore. Se si utilizza try e catch, questo codice cattura qualsiasi eccezione e la ripropone come avviso, consentendo a MATLAB di continuare a eseguire i comandi successivi.

Utilizzare try/catch per gestire diversi tipi di errori in modi diversi.

  • Se la funzione notaFunction è indefinita, emettere un avviso invece di un errore e assegnare all'output il valore di NaN.

  • Se notaFunction.m è presente ma è uno script anziché una funzione, emettere un avviso invece di un errore, eseguire lo script e assegnare all'output il valore di 0.

  • Se MATLAB genera un errore per un qualsiasi altro motivo, generare nuovamente l'eccezione.

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. 

Suggerimenti

  • Non è possibile utilizzare più blocchi catch all'interno di un blocco try, ma è possibile annidare blocchi try/catch completi.

  • A differenza di altri linguaggi, MATLAB non consente l'utilizzo di un blocco finally all'interno di dichiarazioni try/catch.

Funzionalità estese

Cronologia versioni

Introduzione prima di R2006a

espandi tutto