Tratarea excepțiilor

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , gestionarea excepțiilor este un construct de limbaje de programare sau un mecanism hardware al computerului conceput pentru a gestiona erorile în timpul rulării sau alte probleme ( excepții ) care apar în timpul executării unui program pe un computer .

În general, starea curentă va fi salvată într-o locație predefinită, iar executarea va trece la un handler predefinit. În funcție de situație, managerul poate relua apoi execuția în locația inițială, folosind informațiile salvate pentru a restabili starea inițială. Un exemplu de excepție de la care se reia executarea este de obicei eroarea paginii , în timp ce una care de obicei nu poate fi rezolvată în mod transparent este împărțirea la zero .

Din punct de vedere al procesării, întreruperile hardware sunt similare cu excepțiile recuperabile, cu excepția faptului că, de obicei, nu au legătură cu fluxul de program real.

Descriere

Scopul excepțiilor

Tratarea excepțiilor vizează facilitarea utilizării mecanismelor rezonabile pentru a gestiona situațiile eronate sau excepționale care apar în programe. Tratarea excepțiilor poate fi utilizată pentru a transmite utilizatorilor informațiile despre situațiile de eroare care apar în codul bibliotecii și pentru a răspunde selectiv la aceste erori.

Un posibil rol al gestionării excepțiilor este acela de a permite programului să își continue funcționarea normală și de a preveni erorile interne ( blocări ), care duc la afișarea mesajelor de eroare care sunt greu de înțeles de către utilizator. În multe cazuri, este suficient să opriți programul și să produceți un raport de eroare; diferența față de sistemele care nu utilizează excepții pentru a semnaliza execuții anormale ale programului este că, cu o manipulare adecvată a excepțiilor, se poate identifica condiția eronată, simplificând depanarea .

Gestionarea excepțiilor face ca tehnica de gestionare a semnalului găsită în unele limbi să fie învechită.

Structuri de control

Pictogramă lupă mgx2.svg Același subiect în detaliu: Control_Structure § The_exceptions_in_C.2B.2B_and_Derivative_Languages .

Excepțiile sunt definite de limbaje precum C ++ , D , Java , C # și Python . Structura de control utilizată este try-catch : unele limbi acceptă clauze suplimentare, cum ar fi în finally sau else .

Exemple

Java

Pictogramă lupă mgx2.svg Același subiect în detaliu: gestionarea excepțiilor în Java .

Luați în considerare acest bloc simplu de cod Java : declarați o serie de numere întregi de dimensiunea 5 și încercați să accesați celula de memorie la o anumită locație. Java lansează o excepție dacă încercați să accesați acea porțiune de memorie, dacă indexul este mai mare sau egal cu dimensiunea matricei: această excepție poate fi prinsă într-un bloc de captură.

 int position = ...;

incearca {
    // declarați o serie de numere întregi de lungime 5
    int array [] = new int [ 5 ] ;
    // încercați să accesați poziția matricei
    // dar poate fi mai mare decât dimensiunea matricei
    tablou [ poziție ] = 0 ; 
}
catch ( ArrayIndexOutOfBoundsException e ) {  
    Sistem . afară . println ( "Eroare la accesarea matricei" );
}

Piton

În Python, este posibil să gestionați o excepție într-un bloc try-except . În acest exemplu, programul acceptă un șir de intrare și încearcă să îl convertească într-un număr întreg și se termină după ce a calculat și imprimat de două ori numărul introdus pe ecran. Cu toate acestea, dacă șirul introdus nu poate fi convertit, se ValueError o excepție ValueError . Programul prinde această excepție și execută codul în interiorul blocului except , imprimând un mesaj de eroare. În cele din urmă, puteți scrie cod în blocul finally care este executat la sfârșitul blocului try-except .

 incearca :
    integer = int ( input ( "Inserați un număr întreg:" )
    # executarea continuă în mod normal dacă nu este aruncată nicio excepție
    dublu = întreg * 2
    print ( f "Dublu din { întreg } este { dublu } ." )
cu excepția ValueError :
    print ( "Eroare, nu ați introdus un număr întreg." )
în cele din urmă :
    print ( „Programul s-a încheiat.” )

C ++

În acest exemplu simplu C ++ , programul citește un număr întreg ca intrare și imprimă pe ecran rezultatul unei diviziuni în care numărul citit în intrare acționează ca un numitor. Dacă acest număr este 0, programul imprimă un mesaj de eroare.

 #include <iostream>

int main () {
    int numerator = 10 ;
    int numitor ;
    // citiți valoarea numitorului ca intrare
    std :: cin >> numitor ;
    
    incearca {
		if ( numitor == 0 ) {
		    // aruncă o excepție
			arunca 0 ;
		}
		// numitor diferit de 0, tipăriți rezultatul împărțirii
        std :: cout << a / b << endl ;
    } 
    prinde ( int n ) {
        std :: cout << "Numitor zero." << std :: endl ;
    }

    retur 0 ;
}

Bibliografie

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT