È un'eccezione generale aggiunta alle eccezioni attese difensive o non necessarie?

1

Ho letto questo e questo e questo : se la mia domanda manca il punto in quelle risposte, per favore segnalalo e noi ottenere questo eliminato. Queste domande indicano che questa potrebbe essere una cosa negativa in determinate circostanze, ma penso di capire che la differenza.

DOMANDA: Se sto usando una funzione di un'altra libreria che genera un'eccezione non controllata che può essere corretta, E voglio essere sicuro, E il mio programma verrà inviato direttamente all'utente (non ci dovrebbero essere motivi per fallire completamente ), io:

  1. gestirli singolarmente E includere un blocco catch catch-on con un'eccezione generale non controllata (ad esempio per richiedere di nuovo l'input dell'utente)?
  2. gestisce singolarmente le eccezioni specifiche E dichiara di lanciare un'eccezione passandola al chiamante?
  3. gestisci le eccezioni specifiche e lascia fuori l'eccezione generale?

Che cos'è la programmazione standard / difensiva / non necessaria?

    
posta user58446 20.10.2016 - 15:34
fonte

1 risposta

1

If I am using a function from another library that throws an unchecked exception that can be corrected

Se hai un'eccezione puoi fare qualcosa in particolare su all'attuale livello di codice , prendi tutto in modo specifico e fai le tue cose.

AND my program will be outputting directly to the user (there should be no reason to fail completely)

La domanda dovrebbe essere piuttosto se il codice che stai guardando direttamente viene inviato a "l'utente".

Se ti trovi a un limite di interfaccia (*) (ad esempio azione GUI e chiamata di funzione) hai solo due possibilità:

  • Catch Exception e informa l'utente in un modo generale che qualsiasi cosa abbia fatto fallire. (Con tutte le informazioni che ritieni necessarie.)
  • Non catturare Exception e muori o ha il tuo limite di interfaccia specifico in grado di gestire - o meno - in modo (molto?) generico (che può includere solo interrompere il programma).

Quindi, come vedo questo, # 2 è spesso indesiderabile, quindi la domanda diventa dove a catch(Exception) . Direi di farlo al limite dell'interfaccia, e forse solo lì. Il più in alto possibile, ma non più in alto - probabilmente non al blocco catch in cui gestisci le specifiche eccezioni di 3a parte, a meno che l'operazione completa non sia fondamentalmente chiamata al codice di terze parti.

Nel mio libro, difensivo qui significherebbe assicurarsi che il codice di gestione funzioni in modo deterministico di fronte allo sconosciuto Exception , che significa non devi aggiungere lo sconosciuto al blocco del gestore dove gestisci lo specifico. Fondamentalmente equivale a scrivere "codice di sicurezza delle eccezioni" in modo che il tuo codice funzioni sempre di fronte a eccezioni eccezionali.

(*) "confine dell'interfaccia" - termine sciolto qui. Non lasciarti coinvolgere.

    
risposta data 19.12.2016 - 15:10
fonte

Leggi altre domande sui tag