Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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/>
À (at) Tue, 14 Nov 2006 10:11:59 +0100,
Gilles FEVRIER <g-fevrier@wanadoo.fr> é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/>
À (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/>