Exception handling
Van Wikipedia
Exception handling is een programmeertaal constructie of computer hardware mechanisme, ontworpen om problemen (excepties) af te vangen die voorkomen tijdens de uitvoering van software.
In het algemeen wordt de huidige toestand opgeslagen, en een van te voren bepaalde subroutine wordt uitgevoerd. Afhankelijk van de situatie, kan de programma uitvoering hierna worden voortgezet of helemaal afgebroken.
Vanuit software gezien, is er een grote overeenkomst met hardware interrupts, met uitzondering van het feit dat interrupts gewoonlijk niet gerelateerd zijn aan de huidige programma uitvoering.
Inhoud |
[bewerk] Voorbeelden van excepties
Excepties kunnen optreden bij
- lees- of schrijf-fouten naar de harddisk
- Bij schrijven naar of lezen uit geheugen, dat niet bij het programma hoort
- Bij delen door nul
- en nog vele anderen
Maar veel programmeertalen hebben ook de mogelijkheid om zelf excepties te definieren
[bewerk] Doel van de excepties
Excepties zijn bedoeld om ons een praktisch mechanisme te geven om fout en uitzonderings situaties af te vangen die in software kan voorkomen. Zo kunnen op een hoger niveau fouten worden afgevangen die op een lager niveau worden gedetecteerd, zonder dat in de tussenliggende niveaus hier speciale code voor hoeft te worden toegevoegd.
[bewerk] Exceptie veiligheid
Een stuk software wordt Exceptie veilig (exception-safe) genoemd als run-time fouten binnen de code niet leiden tot geheugen lekken, verminkte data of onjuiste uitvoer. Er zijn een aantal niveaus van exceptie veiligheid:
- fout transparant, alle stappen van het programma slagen altijd, en voldoet aan alle eisen zelfs in aanwezigheid van uitzonderlijke situaties. (best)
- vastleg of terugschroef techniek, enkele stappen van het programma kunnen ontbreken, maar de ontbroken stappen hebben geen bijeffecten.
- basis exceptie veiligheid, de ontbroken stappen kunnen bijwerkingen veroorzaken, maar de juiste toestand wordt bewaard (dus alle opgeslagen informatie is correct).
- minimale exceptie veiligheid, gedeeltelijke uitvoering van het programma kan onjuiste data opleveren, maar zal geen crash veroorzaken.
- geen exceptie veiligheid, geen enkele garantie kan worden gegeven. (minst)
Normaal is een basis exceptie veiligheid vereist. Fout transparantie is moeilijk, zo niet onmogelijk te implementeren
[bewerk] Exceptie ondersteuning in programmeertalen
Vele programmeertalen zoals onder meer Ada, C++, C#, Common Lisp, Objective C, D, Delphi Eiffel, Java, Php, Python, hebben ondersteuning voor excepties en exception handling. In deze talen wordt bij het optreden van een exceptie de stack afgewikkeld (unwind) totdat een exception handler voor deze exceptie is gevonden.
[bewerk] C#
public static void Main() { try { // Code die een exceptie kan opleveren } catch(System.Exception) { //Verwerk een systeem exceptie. } catch { //Verwerk een andere exceptie. } finally { // (optioneel) code die altijd uitgevoerd wordt } }
[bewerk] C++
#include <exception> int main() { try { // Code die een exceptie kan opleveren } catch (const std::exception& e) { //Verwerk een standaard exceptie. } catch (...) { // onbekende exceptie } }
[bewerk] Java
try { // Code die een exceptie kan opleveren } catch (VoorbeeldExceptie ee) { //Verwerk een VoorbeeldExceptie } catch (Exception b) { // Verwerk de overige excepties } finally { // (optioneel) code die altijd uitgevoerd wordt }
[bewerk] Python
try: f = file("aFileName") except EnvironmentError: print "Unable to open file" else: try: f.write(could_make_error()) finally: f.close()
[bewerk] Php
try { // Code die een exceptie kan opleveren } catch (ExceptieClass $exceptie) { //Verwerk een ExceptieClass exceptie }
[bewerk] Delphi
try try // Code die een exceptie kan opleveren except on E:Exception do //Verwerk een Exceptie end; finally // Code which will be executed whether or not an exception is raised (e.g. clean-up code) end;