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

[future évolution ?] bloc else pour les excpetions

36 réponses
Avatar
Benoit Dejean
est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}


--
Ne perdez pas de vue qu'un programme qui plante est d'une utilité quasi nulle,
ce qui est loin d'être incompatible avec la notion d'Art.

10 réponses

1 2 3 4
Avatar
Christophe Lephay
"Benoit Dejean" a écrit dans le message de
news:
est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}


Tu peux considérer le code ci-dessous comme une alternative :

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}

// code exécuté si aucune exception n'a été lancée

Chris

Avatar
Michaël Monerau
Christophe Lephay wrote:
"Benoit Dejean" a écrit dans le message de
news:
est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}


Tu peux considérer le code ci-dessous comme une alternative :

try
{
// code pouvant lancer une exception
}
catch()


catch (...) plutôt ;)

{
// code exécuté si un exception est lancée


et un return dans ce catch...

}

// code exécuté si aucune exception n'a été lancée
--

<-= Michaël "Cortex" Monerau =->


Avatar
Benoit Dejean
Le Sun, 06 Jul 2003 10:45:40 +0000, Michaël Monerau a ecrit:

Christophe Lephay wrote:
"Benoit Dejean" a écrit dans le message de
news:
est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}




en fait comme en Python par exemple

Tu peux considérer le code ci-dessous comme une alternative :

try
{
// code pouvant lancer une exception
}
catch()



j'avais maladroitement écrit comme ça pour exprimer la présence d'un ou
plusieurs blocs catch


catch (...) plutôt ;)


c'est vrai que ça a plus de sens ainsi, mais moi j'aimerais exécuter du
code si aucune exception n'a été lancée et non capturer toutes les
exceptions


{
// code exécuté si un exception est lancée


et un return dans ce catch...


je n'ai pas forcément envie de sortir de ma fonction si j'attrape une
exception

}

// code exécuté si aucune exception n'a été lancée



ça ne réponds pas à ma question ni à mon besoin. pour le moment
j'utilise bâtardement des booléens, mais c'est lourd et hasardeux comme
technique.

bool exceptúlse;

try
{
// ...
}
catch([...])
{
except=true;
// ...
}

if(!except)
{
// ...
}

le problème venant quand on multiplie les blocs catch

--
Ne perdez pas de vue qu'un programme qui plante est d'une utilité quasi nulle,
ce qui est loin d'être incompatible avec la notion d'Art.



Avatar
Michel Michaud
Dans news:, Benoit
est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}


J'espère que tu remarques qu'on est très près de ceci
(ou j'ai numéroté les blocs) :

try
{
// code pouvant lancer une exception (A)

// code exécuté si aucune exception n'a été lancée (B)
}
catch()
{
// code exécuté si un exception est lancée (C)
}

La différence étant si le code B peut lever une exception qui
serait capté par le(s) bloc(s) C (et potentiellement une portée
différente de ce qui serait déclaré dans B).

Il y a diverses solutions, mais as-tu du code plus précis pour
voir pourquoi tu veux faire ?

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans news:, Benoit
ça ne réponds pas à ma question ni à mon besoin. pour le moment
j'utilise bâtardement des booléens, mais c'est lourd et hasardeux
comme technique.

bool exceptúlse;

try
{
// ...
}
catch([...])
{
except=true;
// ...
}

if(!except)
{
// ...
}

le problème venant quand on multiplie les blocs catch


Si c'est assez près de ce que tu veux, alors inverse
simplement ton initialisation :

bool except=true; // Ou inverser le nom !

try
{
// ...

except= false;
}
catch([...])
{
// ...
}

if(!except)
{
// ...
}

(mais encore une fois, j'attends de mieux comprendre ce
que tu veux vraiment faire avant de proposer de meilleures
solutions)
--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Nmsmart
Bonjour,

je cherche un developpeur chevronné en C++ pour participer à la finalisation
d'un produit dans le cadre de creation d'une societe d'edition de logiciels;
Serais tu interresse a participer a cette aventure ou à defaut connaitrais
tu quelqu'un qui le serait. merci pour ta réponse.

"Benoit Dejean" a écrit dans le message news:

est-ce qu'il est prévu d'apporter cette fonctionnalité

try
{
// code pouvant lancer une exception
}
catch()
{
// code exécuté si un exception est lancée
}
else
{
// code exécuté si aucune exception n'a été lancée
}


--
Ne perdez pas de vue qu'un programme qui plante est d'une utilité quasi
nulle,

ce qui est loin d'être incompatible avec la notion d'Art.


Avatar
Fabien LE LEZ
On Sun, 6 Jul 2003 23:06:00 +0200, "Nmsmart"
wrote:

je cherche un developpeur chevronné en C++


Va le chercher ailleurs, petit con.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Christophe Lephay
"Fabien LE LEZ" a écrit dans le message de
news:
On Sun, 6 Jul 2003 23:06:00 +0200, "Nmsmart"
wrote:

je cherche un developpeur chevronné en C++


Va le chercher ailleurs, petit con.


Encore un commercial qui s'imagine faire fortune sur le dos d'un technicien
qu'il aveuglera de son charisme ;)

Chris


Avatar
Benoit Dejean
Le Sun, 06 Jul 2003 10:55:54 -0400, Michel Michaud a écrit :

Dans news:, Benoit Dejean

J'espère que tu remarques qu'on est très près de ceci (ou j'ai
numéroté les blocs) :

try
{
// code pouvant lancer une exception (A)

// code exécuté si aucune exception n'a été lancée (B)
}
catch()
{
// code exécuté si un exception est lancée (C)
}

La différence étant si le code B peut lever une exception qui serait
capté par le(s) bloc(s) C (et potentiellement une portée différente
de ce qui serait déclaré dans B).


j'avais bien compris. on est près, mais ce n'est pas ça.

Il y a diverses solutions, mais as-tu du code plus précis pour voir
pourquoi tu veux faire ?


je n'ai pas vraiment de code sous la main, puisque j'évite cette manière
de faire en C++, mais programmant également beaucoup en python, j'utilise
énormément ceci dans mes scripts.

voilà un petit exemple

Objet o;

try
{
o= fonction();
}
catch(exception &e)
{
// traitement d'erreur
// mais qui n'implique pas d'instruction d'arrêt
}
else
{
// AUCUNE exception n'a été déclenchée
// (et non pas aucune exception capturée)
// opérations avec o
// délibérément hors contrôle du try précédent
o.print(); // par exemple
}

mon idée n'est évidemment pas de tout mélanger, juste d'évoquer cette
fonctionnalité. Je n'ai pas l'ambition de dire ce qui est bien ou pas,
mais comme j'utilise souvent cette technique par ailleurs, je vous en fait
par.

--
Ne perdez pas de vue qu'un programme qui plante est d'une utilité quasi nulle,
ce qui est loin d'être incompatible avec la notion d'Art.

Avatar
Benoit Dejean
Le Tue, 08 Jul 2003 03:59:42 +0200, Fabien LE LEZ a écrit :

On Mon, 07 Jul 2003 21:12:13 +0200, Benoit Dejean
wrote:

Objet o;

try
{
o= fonction();
}
catch(exception &e)
{
// traitement d'erreur
// mais qui n'implique pas d'instruction d'arrêt
}
else


Essaie en remplaçant le "else" par
catch (...) { throw; }


ça ne remplace pas du tout. Dans le cas ou l'exception déclenchée est
inattendue, elle remonte, else ou pas else. d'ailleurs il me semble que ce
bloc est le comportement par défaut non? mais je vois ou tu veux en
venir. mais moi j'attends du bloc else, c'est qu'il soit exécuté si
aucune exception n'est lancée: si une exception attendue est survenue ou
si une exception inattendue est survenue (et remontée donc, normal)

je suis pas clair?

{
// AUCUNE exception n'a été déclenchée // (et non pas aucune
exception capturée) // opérations avec o // délibérément hors
contrôle du try précédent o.print(); // par
exemple
}



--
"Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.


1 2 3 4