7

In una lingua che utilizza le eccezioni per segnalare errori, desidero chiamare un codice di terze parti e, in caso di errore, eseguire invece il codice di fallback. Per esempio:Come chiamare con sicurezza il codice di terze parti in presenza di eccezioni?

try: 
    result = third_party.fast_calculation() 
catch: 
    result = slower_calculation() 

Nella mia esperienza, è molto raro per conoscere tutte le eccezioni che potrebbero essere scagliati dal codice di terze parti. Pertanto non posso elencare queste eccezioni nella clausola catch. D'altra parte, mi viene spesso consigliato di non catch ogni possibile eccezione.

Come devo scrivere la clausola catch in questa situazione?

risposta

1

È necessario rilevare i tipi di eccezione solo se si dispone di un modo specifico per gestirli. È possibile (e dovrebbe) intercettare tutti i tipi specifici di eccezioni secondo necessità, nell'ordine più appropriato.

Nel caso in cui vogliate trattare tutte le eccezioni allo stesso modo, credo che il vostro attuale, non tipizzato, sia il meglio che ottiene. Il vero problema, IMO, arriva quando lasci una presa vuota, poiché il codice cliente non può sapere se la funzione ha effettivamente fatto ciò che avrebbe dovuto fare.

0

Prima di tutto, verificare che il codice di terze parti in realtà genera eccezioni. Non può

In secondo luogo, controllare i risultati restituiti se non viene generata alcuna eccezione dal codice di terze parti. Un valore di stato può essere restituito per indicare se è stato raggiunto un risultato positivo. In tal caso, potrebbe essere necessario un controllo dello stato per determinare se le azioni di recupero (ad esempio utilizzare il metodo "slower_calculation") sono necessarie dopo un cattivo stato di ritorno.

Problemi correlati