Gestion des erreurs

Le
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
Vos réponses
Trier par : date / pertinence
Paul Gaborit
Le #131635
À (at) Tue, 14 Nov 2006 10:11:59 +0100,
Gilles FEVRIER
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 - Perl en français -
Publicité
Poster une réponse
Anonyme