Prom ha scritto:
Il mio problema è che se ad un certo punto del programma viene generata una eccezione il programma mi avvisa ed esce dalla rouine, ma le istruzioni prima dell'errore sono state eseguite ed io vorrei che questo non accadesse. [...]
Io vorrei che il programma venisse eseguito tutto o venisse eseguito proprio.
La soluzione che richiedi sembra affine al concetto transazionale di un database, ma prima di approfondire bisogna vedere se ha senso nel tuo contesto, o se non si possa risolvere il tutto in un altro modo.
Dal codice che hai scritto, si direbbe che tutto sia legato a condizioni che potresti appunto verificare prima di procedere.
Ad esempio, piuttosto che chiedere di annullare la creazione di una directory appena eseguita perché non trovi un file in una certa posizione, non ha molto senso: anticipa il controllo di tutte le condizioni che potrebbero fare fallire il tuo processo, verificando l'esistenza delle directory, dei file e delle risorse che ti occorrono, e che i valori specificati dall'utente - se ce ne sono - risultino formalmente corretti; dopodiché, esegui le istruzioni che "alterano" lo stato del sistema solo dopo aver completato il processo di validazione preventivo.
A mio avviso, sarebbe molto più semplice rispetto al dover gestire una "transazione" o codificare anche un eventuale "rollback" di tutte le operazioni che hai eseguito e a cui non puoi dare un seguito a causa dell'errore riscontrato.
Ciao!