continue in verbindung mit einem try/catch



  • hallo

    kann man die continue anweisung in verbindung mit einer fehlerbehandlungsroutine einsetzen? ich möchte speziell in schleifen bei einem try/catch block, dafür sorgen das das programm nicht beendet wird und das zugleich auch die schleife weiterläuft. ist das also standard gemäss und sinnvoll mit der anweisung continue?

    und wie kann man das ganze ohne chleifen bewerkstelligen? angenommen eine funktion wird aufgerufen. ziemlich am anfang gibt es eine exception, das programm wird nun an dieser stelle abgebrochen. was aber, wenn man den unteren code der aufgerufenen funktion noch ausführen lassen will?



  • hm 🙂



  • fabionono schrieb:

    kann man die continue anweisung in verbindung mit einer fehlerbehandlungsroutine einsetzen? ich möchte speziell in schleifen bei einem try/catch block, dafür sorgen das das programm nicht beendet wird und das zugleich auch die schleife weiterläuft. ist das also standard gemäss und sinnvoll mit der anweisung continue?

    es ist noch ein bisschen unklar, was du genau mit continue tun willst. vielleicht hilft ein bisschen (pseudo-)code?

    etwa so?

    for (...)
    {
       some_fun_could_throw();
    }
    

    mit lokaler fehlerbehandlung dann etwa so?

    foo (...)
    {
       try
       {
          some_fun_could_throw();
       } 
       catch (...)
       { 
          //aufräumen und weitermachen
       }
    }
    

    wenn du den fehler nicht lokal behandeln willst/kannst, inwiefern würde es dann einen sinn machen, die schleife weiterlaufen zu lassen?

    und wie kann man das ganze ohne chleifen bewerkstelligen? angenommen eine funktion wird aufgerufen. ziemlich am anfang gibt es eine exception, das programm wird nun an dieser stelle abgebrochen. was aber, wenn man den unteren code der aufgerufenen funktion noch ausführen lassen will?

    wenn der untere teil der funktion eine eigene aufgabe erfüllt, warum ist er dann nicht in einer eigenen funktion ausgelagert, der auch unabhängig von der funktion, die fehlschlagen kann ausgeführt wird?

    wenn es dir allerdings um die automatische freigabe von resourcen geht, könnte dich a. alexandrescus ScopeGuard interessieren.

    und dass du nicht auf die idee kommst, ScopeGuard für beliebigen code, den du noch ausführen willst zu verwenden: wenn eine exception geworfen wird führt code, der eine weitere exception wirft zum unmittelbaren und unwiderruflichen abbruch des programms.

    aber wahrscheinlich ist es tatsächlich am besten, wenn du uns sagst, was du konkret vorhast.



  • meinst du in etwa so:

    int main()
    {
        try
        {
            //irgendwas tun...
            throw "throw_some_text";
            std::cout << "irgendwie weiter arbeiten";  // dies wird nicht mehr ausgeführt, da mit throw aus der Funktion gesprungen wird
            //...
        }
        catch( ... )
        {
           std::cout << "irgendeine fehlerbehandlung" << std::endl;
           // Fehlerbehandlung...
           if( fehler_behoben ) continue;  // <-- hier an die Stelle in der Schleife zurückkehren, an der throw geworfen wurde
        }
    }
    

    ?


Log in to reply