Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion des erreurs

1 réponse
Avatar
Gilles FEVRIER
Salut,

Revenant au PERL après de longues années d'interruption, je cherche de
quelle façon gérer (intercepter en fait) les erreurs.

Un exemple simple : la connexion à une base de données.

J'utilise le module DBI.

J'essaie de me connecter à une base de données. Si la connexion échoue,
j'essaie de me connecter à une base de secours.

Comment intercepter la première erreur de façon à ce qu'elle ne
s'affiche pas et que je puisse faire ma seconde tentative ?

A+

Gilles

1 réponse

Avatar
Paul Gaborit
À (at) Tue, 14 Nov 2006 10:11:59 +0100,
Gilles FEVRIER écrivait (wrote):
Revenant au PERL après de longues années d'interruption, je cherche de
quelle façon gérer (intercepter en fait) les erreurs.

Un exemple simple : la connexion à une base de données.

J'utilise le module DBI.

J'essaie de me connecter à une base de données. Si la connexion
échoue, j'essaie de me connecter à une base de secours.

Comment intercepter la première erreur de façon à ce qu'elle ne
s'affiche pas et que je puisse faire ma seconde tentative ?


Si c'est une erreur de connexion, la méthode 'connect' de DBI retourne
la valeur 'undef' à la place d'un 'dbh' valide. Il suffit donc de
tester si la valeur est définie.

Si c'est une erreur interne (du genre "appel à un driver qui n'est pas
installé") ou si vous avez positionné le flag 'RaiseError', DBI meurt
via un appel à 'die'.

Pour capter un 'die', il suffit de passer par l'eval-uation d'un bloc.

eval {
# ...appel a quelque chose qui peut appeler 'die'...
};

if ($@) {
# $@ contient ce qui a été généré par l'appel à 'die'
} else {
# le 'eval' s'est bien déroulé
}

En fait tout cela est expliqué dans la doc de DBI dans les sections
'PrintError' et 'RaiseError'.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>