Quando li usi? Trovo che sto usando se è molto più delle eccezioni. Sembra che io stia prendendo le eccezioni usando i miei "se", prima ancora di averli. Ci sono if in tutto il mio codice.Quando è necessario verificare la presenza di errori utilizzando "if" e quando si devono utilizzare le eccezioni?
risposta
Le istruzioni catch sono progettate per gestire errori gravi e in particolare per la connessione a servizi esterni come un servizio Web, database, richiesta Web e così via dove si verificano e si prevede che si verifichino di tanto in tanto errori. È più pesante sull'ambiente di runtime gestire un'eccezione, piuttosto che scrivere codice valido e utilizzare le funzionalità del linguaggio specifico come if o operazione ternaria.
i tentativi di cattura non sono la prima linea di difesa, sono l'ultima riga che utilizza le pratiche di codifica difensive.
Soprattutto quando si lavora con applicazioni di grandi dimensioni, la gestione delle eccezioni è davvero una pratica migliore. Come hai detto, stai ricevendo molte affermazioni. Con python, l'uso delle istruzioni try/except consente di creare un modo più standardizzato di gestire le eccezioni. Con le eccezioni, avrai il vantaggio di vedere il tipo di classe di eccezioni e qualsiasi altra personalizzata che costruisci. Ti dà solo un modo molto più strutturato di codifica.
EAFP: Easier to ask for forgiveness than permission.
E 'comune stile di codifica Python per assumere l'esistenza di chiavi valide o attributi ed eccezioni di cattura, se l'ipotesi si rivela falsa.
Questo contrasta con lo stile LBYL (Look before you leap) comune a molti altri linguaggi come C.
Update 1
Naturalmente, è necessario assicurarsi di gestire eccezioni catturati e non solo in silenzio ignorarli altrimenti perderai un sacco di tempo per il debugging! pass
probabilmente non è quello che stai cercando!
Update 2
si potrebbe intercettare le eccezioni specifiche che siete in attesa essere raise
-d, siano essi built-in exceptions o in altro modo.
Ho provato generico: tranne Exceptione,: print e pass E 'questo? – TIMEX
@TIMEX: non esiste una risposta generica qui. Il modo in cui gestisci l'eccezione dipende dall'elaborazione che stavi facendo quando era 'raise' -d. Detto questo, il passaggio è molto raramente quello che vuoi! – Johnsyweb
Vale la pena notare che l'uso dell'eccezione di gestione contro le istruzioni 'if' dice al lettore del codice qualcosa su ciò che si aspetta che accada. Un'istruzione 'if' implica che esiste una possibilità considerevole che la condizione sia 'True' o' False', mentre 'try' /' except' implica il trattamento dei casi limite. Quindi, mentre EAFP può essere un python idematico, in un dato caso c'è spazio per l'interpretazione. Inoltre, non dovresti mai usare mai generici 'except Exception'. – Wilduck
Non sto a ripetere ciò che molte persone hanno già detto, ma c'è un grande vantaggio di utilizzare eccezioni che vorrei citare:
Se alcuni di routine non riesce, si può facilmente decidere su quale livello di Indirizzamento indiretto si dovrebbe gestire tale eccezione - e non sarà necessario gonfiare i livelli più profondi con il controllo degli errori dopo, ad esempio, ogni passo.
Ovviamente questo non ti libera dalla responsabilità di avere un buon codice di pulizia che lascerà tutto chiaro per ogni possibile percorso di esecuzione: in modo da liberare qualsiasi risorsa, socket, commit o transazioni di rollback, ecc.E ci sono molti mezzi per farlo:
try... finally
blocchi, consentendo ad ogni eccezione a propagare ma pulizia tutto prima (molte lingue, tra cui Python),- il
with
economico (specifico per Python), - il paradigma RAII che implica la pulizia dei distruttori (principalmente C++).
- 1. Quando è necessario utilizzare System.AppContext?
- 2. In SQL Server, quando è necessario utilizzare GO e quando si utilizza il punto e virgola;?
- 3. Verificare la presenza di nil con guardia invece di if?
- 4. Quando è necessario utilizzare _.bindAll() in Backbone.js?
- 5. Quando rilevare le eccezioni?
- 6. Perché l'ordine è importante quando si rilevano le eccezioni?
- 7. verificare la presenza di duplicati vs utilizzare PDO errorInfo result
- 8. Quando è necessario utilizzare le classi in PHP
- 9. C macro: #if verificare la presenza di uguaglianza
- 10. Quando utilizzare le categorie e quando utilizzare la sottoclasse?
- 11. Quando è necessario utilizzare [Sfogliabile (vero)]?
- 12. Quando registrare le eccezioni concatenate?
- 13. Quando utilizzare le Proprietà e quando si Mappa in Java?
- 14. Quando è necessario utilizzare l'operatore controllato in C#?
- 15. Prevenire la presenza di errori in TextView
- 16. Quando è necessario riciclare una bitmap utilizzando LRUCache?
- 17. Quando il controllo degli errori è eccessivo?
- 18. Quando è necessario utilizzare i reindirizzamenti di binding?
- 19. Quando è necessario NSCopying?
- 20. Le mappe di sorgenti JavaScript funzionano quando si verificano errori?
- 21. Come gestire le eccezioni in OnNext quando si utilizza ObserveOn?
- 22. Errori strani quando si installa la gemma
- 23. È necessario jQuery quando si utilizza Twitter Bootstrap con Angular.js?
- 24. Quando utilizzare le interfacce e quando utilizzare le funzioni di ordine superiore?
- 25. È necessario utilizzare JADE quando si costruiscono le app angolari con nodo ed Express?
- 26. sun-jaxws.xml - Quando è necessario e quando no?
- 27. come sapere le possibili eccezioni quando si usa try catch?
- 28. Quando è necessario salvare le impostazioni su Windows Phone 7?
- 29. Errori di Git quando si spinge Heroku
- 30. Distribuire Nodejs + MongoDB su Heroku ma è necessario verificare la carta di credito quando si installa il componente aggiuntivo
Questo è stato chiesto infinite volte (2739582, 1152541, 1313812). Tra questa domanda, la tua domanda 4557577 (e senza dubbio innumerevoli altre) e le tue oltre ottocento domande *, sembra che tu sia una specie di spammer di domande. –