Delphi sur le bout des doigts DELPHI A propos des exceptions Une exception est

Delphi sur le bout des doigts DELPHI A propos des exceptions Une exception est déclenchée quand une erreur ou un autre événement interrompt le déroulement normal d'un programme. L'exception transfère le contrôle à un gestionnaire d'exception, ce qui vous permet de séparer la logique normale d'exécution du programme de la gestion des erreurs. Comme les exceptions sont des objets, elles peuvent être regroupées en hiérarchies en utilisant l'héritage et de nouvelles exceptions peuvent être ajoutées sans affecter le code existant. Une exception peut véhiculer des informations, par exemple un message d'erreur, depuis le point où elle est déclenchée jusqu'au point où elle est gérée. Quand une application utilise l'unité SysUtils, la majorité des erreurs d'exécution sont automatiquement converties en exceptions. Nombre d'erreurs qui, autrement, provoqueraient l'arrêt d'une application (mémoire insuffisante, division par zéro, erreurs de protection générales) peuvent ainsi être interceptées et gérées. Quand utiliser des exceptions Les exceptions offrent un moyen élégant d'intercepter les erreurs d'exécution sans arrêter le programme et sans utiliser d'encombrantes instructions conditionnelles. Les exigences imposées par la sémantique de la gestion des exceptions se traduisent par une pénalisation au niveau de la taille du code ou des données et au niveau des performances à l'exécution. Il est possible de déclencher des exceptions pour presque toutes les raisons et de protéger pratiquement n'importe quel bloc de code en l'intégrant dans une instruction try...except ou try...finally, mais, en pratique, il vaut mieux réserver ces outils à des situations particulières. La gestion des exceptions convient aux erreurs qui ont peu de chances de se produire, mais dont les conséquences sont quasiment catastrophiques (le crash d'une application, par exemple) ; aux conditions d'erreurs difficiles à tester dans des instructions if...then ; et quand vous avez besoin de répondre aux exceptions déclenchées par le système d'exploitation ou par des routines dont le code source n'est pas sous votre contrôle. Les exceptions sont couramment utilisées pour les erreurs matérielles, de mémoire, d'entrée/sortie et du système d'exploitation. Les instructions conditionnelles sont souvent le meilleur moyen de tester les erreurs. Par exemple, supposons que vous vouliez vous assurer de l'existence d'un fichier avant d'essayer de l'ouvrir. Vous pourriez le faire comme ceci : try AssignFile(F, FileName); Reset(F); // déclenche une exception EInOutError si le fichier est introuvable except on Exception do ... end; Mais, vous pourriez aussi éviter la lourdeur de gestion d'exception en utilisant : if FileExists(FileName) then // renvoie False si le fichier est introuvable ; ne déclenche aucune exception begin AssignFile(F, FileName); Reset(F); end; Les assertions fournissent un autre moyen de tester une condition booléenne à n'importe quel endroit du code. Quand une instruction Assert échoue, le programme s'arrête avec une erreur d'exécution ou (s'il utilise l'unité SysUtils) déclenche une exception EAssertionFailed. Les assertions devraient n'être utilisées que pour tester les conditions que vous ne souhaitez pas voir se produire. Déclaration des types exception Les types exception sont déclarés comme les autres classes. En fait, il est possible d'utiliser comme exception une instance de toute classe. Il est néanmoins préférable de dériver les exceptions de la classe Exception définie dans SysUtils. Vous pouvez grouper les exceptions en familles en utilisant l'héritage. Par Gestion des Exceptions Delphi Delphi : de Borland a Embarcadero Langage Pascal RAD Studio XE2 2012 Nouveautés IDE depuis Delphi 7 Nouveautés Langage depuis Delphi 7 Nouveautés Delphi XE2 2012 Delphi XE2 64 bits FireMonkey dans Delphi XE2 Multiplates-formes Delphi XE2 2012 Programmation Delphi : le meilleur est arrivé Refactoring Delphi Types de Données Delphi Génériques de Delphi Embarcadero Delphi (English) Nouveautés Delphi XE 2011 Classes et objets Delphi Gestion des Exceptions Delphi Procédures et Fonctions Delphi Les Propriétés (Classes Pascal Delphi) Les Champs (Classes Pascal Delphi) Les Méthodes (Classes Pascal Delphi) Présentation EDI Delphi Unicode dans Delphi Nouveautés Delphi 2010 - partie 2 Nouveautés Delphi 2010 - partie 1 Nouveautés Delphi 2009 - partie 2 Nouveautés Delphi 2009 - partie 1 DELPHI... JEDI Visual Component Library GExperts UIB components to use Interbase and FireBird Virtual Treeview component Andy's Blog and Tools Outils et Composants indispensables Delphi Embarcadero Delphi sur Developpez Delphi CodeS SourceS About Delphi L'Ordinateur Personnel Liens Delphi Ma liste de blogs The Oracle at Delphi Delphi-Treff interview–In English Nick Hodges Random Thoughts on the Passing Scene #162 DELPHI: Gestion des Exceptions Delphi http://delphi-pascal.blogspot.com/2011/09/exceptions-delphi.html 1 sur 4 16/01/2012 11:58 exemple, les déclarations suivantes de SysUtils définissent une famille de types exception pour les erreurs mathématiques : type EMathError = class(Exception); EInvalidOp = class(EMathError); EZeroDivide = class(EMathError); EOverflow = class(EMathError); EUnderflow = class(EMathError); Etant donné ces déclarations, vous pouvez définir un seul gestionnaire d'exceptions EMathError qui gère également EInvalidOp, EZeroDivide, EOverflow et EUnderflow. Les classes d'exceptions définissent parfois des champs, des méthodes ou des propriétés qui contiennent des informations supplémentaires sur l'erreur. Par exemple, type EInOutError = class(Exception) ErrorCode: Integer; end; Déclenchement et gestion des exceptions Pour déclencher un objet exception, utilisez une instance de la classe d'exception avec une instruction raise. Par exemple, raise EMathError.Create; En général, une instruction raise a la forme : Raise objet at adresse Où "objet" et "at adresse" sont tous deux facultatifs. Lorsqu'une adresse est spécifiée, cela peut être n'importe quelle expression dont le résultat est un type pointeur, mais c'est habituellement un pointeur sur une procédure ou une fonction. Par exemple : raise Exception.Create('Paramètre manquant') at @MyFunction; Utilisez cette option pour déclencher l'exception depuis un emplacement de la pile antérieur à celui où l'erreur s'est effectivement produite. Quand une exception est déclenchée (c'est-à-dire qu'elle est référencée dans une instruction raise), elle est régie par la logique particulière de gestion des exceptions. Une instruction raise ne renvoie jamais le contrôle d'une manière normale. Elle transfère à la place le contrôle au gestionnaire d'exception le plus proche capable de gérer les exceptions de la classe donnée. Le gestionnaire le plus proche correspond au dernier bloc try...except dans lequel le flux d'exécution est entré sans en être encore sorti. Par exemple, la fonction suivante convertit une chaîne en entier et déclenche une exception ERangeError si la valeur résultante est hors de l'intervalle spécifié : function StrToIntRange(const S: string; Min, Max: Longint): Longint; begin Result := StrToInt(S); // StrToInt est déclarée dans SysUtils if (Result < Min) or (Result > Max) then raise ERangeError.CreateFmt('%d n''est pas dans l''intervalle spécifié %d..%d', [Result, Min, Max]); end; Remarquez la méthode CreateFmt appelée dans l'instruction raise. Exception et ses descendants ont des constructeurs spéciaux qui proposent d'autres moyens de créer des messages d'exception et des identificateurs de contexte. Une exception déclenchée est automatiquement détruite une fois qu'elle a été gérée. N'essayez jamais de détruire manuellement une exception déclenchée. Remarque: Le déclenchement d'une exception dans la section initialisation d'une unité peut ne pas donner le résultat attendu. La gestion normale des exceptions provient de l'unité SysUtils qui doit d'abord être initialisée pour que cette gestion soit utilisable. Si une exception se produit lors de l'initialisation, toutes les unités initialisées (dont SysUtils) sont finalisées et l'exception est redéclenchée. Alors, l'exception est interceptée et gérée, généralement par l'interruption du programme. De la même façon, le déclenchement d'une exception dans la section finalisation d'une unité risque de ne pas produire le résultat escompté si SysUtils a déjà été finalisé lorsque l'exception a été déclenchée. Instructions Try...except Les exceptions sont gérées dans des instructions try...except. Par exemple, try X := Y/Z; except on EZeroDivide do HandleZeroDivide; end; Cette instruction tente de diviser Y par Z mais appelle la routine HandleZeroDivide si une exception EZeroDivide est déclenchée. L'instruction try...except a la syntaxe suivante : try instructions except exceptionBlock end où instructions est une suite d'instructions (délimitée par des points-virgule) et exceptionBlock est soit une autre suite d'instructions, soit une suite de gestionnaires d'exceptions, éventuellement suivie par des instructions else Un gestionnaire d'exception a la forme : On identificateur: type do instruction où identificateur: est facultatif (si identificateur est précisé, ce doit être un identificateur valide), type est le type James Gosling: on the Jav Road Marco's Tech World DELPHI: Gestion des Exceptions Delphi http://delphi-pascal.blogspot.com/2011/09/exceptions-delphi.html 2 sur 4 16/01/2012 11:58 utilisé pour représenter les exceptions et instruction est une instruction quelconque. Une instruction try...except exécute les instructions dans la liste initiale instructions. Si aucune exception n'est déclenchée, le bloc exception (exceptionBlock) n'est pas pris en compte et le contrôle passe à l'instruction suivante du programme. Si une exception est déclenchée lors de l'exécution de la liste instructions initiale, que ce soit par une instruction raise dans la liste instructions ou par une procédure ou une fonction appelée dans la liste instructions, il va y avoir une tentative de "gestion" de l'exception : Si un des gestionnaires du bloc exception ne correspond à l'exception, le contrôle passe au premier d'entre eux. Un gestionnaire d'exceptions "correspond" à une exception si le type du gestionnaire est la classe de l'exception ou un ancêtre de cette classe. Si aucun gestionnaire correspondant n'est trouvé, le contrôle passe à l'instruction de la clause else si elle est définie. Si le bloc d'exception est simplement une suite d'instructions sans gestionnaire d'exception, le contrôle passe à la première instruction de la liste. Si uploads/Management/ gestion-des-exceptions-delphi.pdf

  • 26
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Fev 28, 2022
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.1560MB