Qual è la differenza tra un errore e un ‘ eccezione .NET?

Potrebbe, per favore, mi spieghi qual è la differenza tra un errore e un’eccezione?

  • +1 domanda Interessante, non ho mai dato questo pensiero.
  • Si potrebbe desiderare di chiarire che cosa si intende per “errore”, dal momento che il termine è usato in una vasta gamma di contesti, anche in .NET mondo. Anche “l’eccezione”, può essere ambiguo tra Win32 Gestione Strutturata delle Eccezioni (che è un sistema operativo Windows meccanismo per la segnalazione di errori) e gestito System.Exception (che è un CLR meccanismo per la segnalazione di errori).
  • Correlati (Java-specifico): stackoverflow.com/questions/912334/…
  • Stai scherzando?
  • +1 a Frank per la trasparenza.
InformationsquelleAutor Amit | 2010-03-12

 

8 Replies
  1. 13

    Un’eccezione è una classe che sfrutta il linguaggio semantica. Come altri hanno detto, eccezioni interrompere l’esecuzione dello stack fino catturato. Un’eccezione può essere usato per trasmettere un errore, ma più in generale è utilizzato per esprimere che qualcosa di eccezionale si è verificato.

    Errori, d’altra parte, può essere eccezionale o non.

    Ci sono diversi tipi di errori:

    • Utente di errore – questo dovrebbe essere gestito senza eccezione
    • Errore di sintassi – questo non dovrebbe compilare staticamente tipizzato lingue (in linguaggi dinamici, sono un po ‘ più difficile da scoprire)
    • Errore di Runtime – questo verrà generata un’eccezione, o in silenzio fallire (di solito la creazione di risultati imprevisti)

    Davvero, le eccezioni devono essere limitata alla gestione di errori di runtime, dal momento che un utente l’immissione di dati non validi non è “eccezionale.” Per gestire gli errori degli utenti, si dovrebbe prendere seguenti metodi:

    • Evitare brutte dati di input (front-end di convalida)
    • Evitare brutte dati da persistenti (back-end di convalida)

    Eccezioni dovrebbe essere usato come ultima linea di difesa” per un errore dell’utente. Se si sta scrivendo un livello di persistenza, si può contare su eccezioni per garantire che i dati non validi che cade attraverso la convalida non ottenere permanente. Tuttavia, si consiglia di correggere tutti questi mettendo un fix per la convalida che impedisce l’errore, in primo luogo.

    • Direi che gli errori dell’utente potrebbe essere gestita con eccezioni internamente (ad esempio, Verificare un metodo che restituisce un’eccezione personalizzata). Tali eccezioni sarebbero stati scoperti e segnalati in un modo amichevole, però. Questo non è il normale flusso di controllo, né è probabile che hanno implicazioni in termini di prestazioni.
    • Sono d’accordo. Ho avuto un bisogno per l’utilizzo di eccezioni/generazione ripetuta di controllo del flusso di “paradigma” di una volta. Fu un’esotica caso ma, sono stato contento di qualcosa che esisteva per farmi realizzare ciò di cui avevo bisogno … @Michele, non downvote, ma non del tutto d’accordo entrambi.
    • Credo di non stato abbastanza bene. Eccezioni non dovrebbero essere il principale meccanismo utilizzato garantire il corretto ingresso. Se i dati non passa la validazione, che diventa un caso eccezionale. È proprio quello che intendevo quando ho detto “un’eccezione che può essere utilizzato per trasmettere un messaggio di errore.” Dovrò fare il “possibile” in corsivo.
    • Vorrei che fosse possibile per downvote un commento. 😉 Errori dell’utente non deve essere gestito con un’eccezione, perché un errore dell’utente non è una condizione eccezionale. Un errore dell’utente accade tutto il tempo. Pensare di input non corretto in una casella di testo che deve essere convalidato. Eccezioni hanno un grande impatto sulle performance, e non dovrebbe essere usato per gestire le condizioni che dovrebbero essere parte del vostro disegno e le esigenze.
    • Credo che abbiate ragione entrambi. Nel caso In cui l’utente inserisce i dati cattivi, non è eccezionale, ma se il programmatore consente che il livello di persistenza, poi lo fa diventare eccezionale. Al punto che il male di dati viene salvato, il codice non so come rispondere al fatto che alcuni dei dati non essere salvato, e quindi di un caso eccezionale è stato creato. modifica cambiato “rispetto” per “poi”. Io odio quando I mix di tutte queste cose.
    • Sì e no. Il punto è presa bene, e corretta. Ma dal punto di vista semantico, direi che una volta male di dati arriva fino a un livello di persistenza, non è un errore dell’utente in più… il suo è un programmatore di errore. 😉 In altre parole, non dovrebbe mai hanno ottenuto lì, in primo luogo. @TrueWill esempio di Verificare il metodo implica UI di convalida, che non dovrebbe utilizzare le eccezioni per segnalare i problemi.
    • Vorrei Eccezione era stato nominato il Fallimento. Le eccezioni sono le condizioni di errore. Mentre si ha bisogno di prendere in considerazione le prestazioni, le eccezioni sono raramente i veri colli di bottiglia. Io non sto sostenendo che utilizza eccezioni per UI di convalida; sto solo dicendo che io non chiudere fuori di mano.

  2. 13

    Un’eccezione è un oggetto di un tipo derivanti dall’ System.Exception classe. Viene utilizzato in una throw dichiarazione di trasferire il controllo ad un catch clausola in un try blocco da qualche parte più in alto nello stack di chiamate.

    Un errore è solo un po ‘ di codice o il messaggio che si vuole interpretare. Il problema con i codici di errore è che si può decidere di ignorarle:

    MethodThatReturnsAnError();
    SomeCodeThatShouldNotExecuteOnError();

    Che chiamare semplicemente ignorare il codice di errore se uno è restituito. Tuttavia:

    MethodThatThrowsAnException();
    SomeCodeThatShouldNotExecuteOnError();

    Questo non può essere ignorato, e trasferire il controllo dello stack, passato “SomeCodeThatShouldNotExecuteOnError();“.

    • Non so se mi vorresti dire che c’è un problema con i codici di errore, piuttosto che con le eccezioni che si possono sfruttare il fatto che “qualcuno” dovrà gestire l’eccezione, considerando che un errore può essere ignorato. Le eccezioni non sono meglio di errori. Essi sono semplicemente ciò che essi sono chiamati, eccezioni. Qualcosa di eccezionale si è verificato e interrompere il flusso di processo.
    • il fatto che i codici di errore possono essere ignorati il problema con i codici di errore. Che, oltre al fatto che sono semanticamente leggero.
    • Dal punto di vista semantico, un’eccezione non è necessariamente un errore, è solo qualcosa che si deve interrompere il “normale” percorso di codice, in favore di una “eccezionale” uno. La maggior parte del tempo che significa la stessa cosa come “errore”, ma poi siamo in grado di ottenere semantico dibattiti su cosa “errore” significa. “Errori di sistema”, programmatore di “errori”, e “gli errori dell’utente” sono tutti concettualmente “errori”, ma il codice per l’interfaccia utente di un utente “errore”, come l’inserimento di un valore non valido in una casella di testo non è di solito considerato “eccezionale”, sufficiente a generare un’eccezione.
    • Mi potrebbe chiarire che si può decidere di involontariamente ignora i codici di errore. Si può ancora ignorare eccezioni, usando solo un try/catch con nessuna azione all’interno del blocco catch.
    • esattamente. Il fatto che si sta ignorando eccezioni è evidente guardando il codice, sia con gli occhi umani, o con un attrezzo.
  3. 3

    Di solito, io li classificano come:

    Errore – è un noto flusso di lavoro all’interno dell’applicazione. Per esempio: nome utente non ha fornito durante il processo di autenticazione è un errore.

    L’applicazione in grado di gestire queste situazione & sarà in grado di mostrare amichevole messaggi per l’utente per la richiesta di ingresso corretto e/o elaborare i dati in un altro.

    Eccezione – è solito lanciare quando si va fuori del vostro sistema e/o succede qualcosa di imprevisto dell’applicazione. Per esempio: apertura di un handle di file potrebbe generare un’eccezione a causa di diritti insufficienti o un file non esistente.

    Di solito in questo caso, l’applicazione può prendere questi eccezioni e/o scrivere un generico gestore di gestire tutte le eccezioni nel sistema.

    Come regola generale, se si conosce un caso particolare esiste a causa della quale la domanda non può procedere con il lavoro, lo etichetta come un errore & gestire il caso con grazia.

    Tutti i restanti ‘unknown-‘ incognite ” possibile, quindi, rientrano nella categoria delle Eccezioni.

    HTH.

  4. 2

    Eccezioni è necessario scrivere il codice di ignorare. Codici di errore, è necessario scrivere il codice per non ignorare.

    • Questo mi piace, così ho con voto positivo. Tuttavia, si deve già conoscere sia le eccezioni ed errori (beh, codici di errore, come si dice), in modo che per l’appello. Così il massimo dei voti per pithiness, ma non sono sicuro che sia davvero la risposta alla domanda 🙂
    • upvote per l’umorismo 😀
  5. 1

    Se non fa eccezione gestore per un dato eccezione è presente, il programma si interrompe l’esecuzione con un messaggio di errore.

    Eccezioni sono Errori. Così Tutti gli Errori sono Eccezioni, ma non è vero il contrario.
    Exception Handling tecnica gestisce l’Eccezione/Imprevisti(Errori), Mentre gli errori sono Situazioni in cui ci havenot previsto in modo esplicito che dobbiamo prendere cura di loro redirectly l’Utente(s) di qualche Pagina HTML statica, & l’acquisizione in Registri & trovare una Soluzione per l’Errore si è verificato.

    Errori Possono Verificarsi su 2 Livelli

    • A Livello di pagina( uso ErrorPage Attributo alla Direttiva di pagina)
    • Livello di applicazione(Devono essere Gestiti in web.config)

    Compilazione
    CustomError … CustomError
    errore…. errore
    Compilazione
    Nota – Pagina di Errore a Livello di gestione sostituisce l’Applicazione di Errore a Livello di Gestione.

    Gestione delle eccezioni:->

  6. 0

    Eccezione: Quando un passaggio in qualche azione non riesce, tutti i passaggi successivi che azione sono semplicemente NON viene eseguito. Questo è dove eccezioni brillare.

    Errore: è quando, come nel primo caso, si desidera interrompere l’esecuzione del codice attuale, ma prima è necessario liberare risorse precedentemente allocate.


    Aver detto questo,

    Classe di eccezione ha HResult proprietà. HRESULT è un valore a 32 bit, diviso in tre campi diversi: un codice di gravità, un codice di funzione, e un codice di errore.

    Dare un’occhiata a questo post, vi aiuterà a comprendere meglio

  7. 0

    Errori sono eventi. Classe di eccezione rappresenta gli errori che si verificano durante l’esecuzione dell’applicazione (runtime) e fornisce un meccanismo per gestire il loro utilizzo di blocchi try catch.
    Errori potrebbe essere runtime o di errore del compilatore/s.

    Esempi di eventi di errore:
    HttpApplication.Evento di errore di Sistema.Web dll, FileSystemWatcher.Evento di errore di Sistema.IO
    Entrambe le dll hanno la stessa definizione di evento di Errore

    public event EventHandler Error

    Da .Net Framework 4.5 documentazione https://msdn.microsoft.com/en-us/library/system.exception(v=vs. 110).aspx

    Eccezione della classe rappresenta gli errori che si verificano durante l’esecuzione dell’applicazione.

    Gli errori e le eccezioni

    Errori di Run-time può verificarsi per una serie di motivi. Tuttavia, non tutti gli errori devono essere trattati come delle eccezioni nel codice. Qui ci sono alcune categorie di errori che possono verificarsi in fase di esecuzione e i modi appropriati per rispondere a loro.

    Errori di utilizzo. Un errore di utilizzo rappresenta un errore nella logica del programma che può causare un’eccezione. Tuttavia, l’errore deve essere affrontata non attraverso la gestione delle eccezioni, ma modificando il codice errato.

    Errori di programma. Un errore di programma è un errore di run-time che necessariamente non possono essere evitati bug di scrittura-codice libero.

    In alcuni casi, un errore di programma può riflettere previsto di routine o condizione di errore. In questo caso, si può evitare di utilizzare la gestione delle eccezioni per affrontare il programma di errore e invece ripetere l’operazione.

    In altri casi, un errore di programma riflette un errore imprevisto condizione che può essere gestito in codice.

    Errori di sistema. Un errore di sistema è un errore di run-time che non possono essere gestiti a livello di programmazione in modo significativo. Per esempio, qualsiasi metodo può lanciare un’eccezione OutOfMemoryException se il common language runtime è in grado di allocare la memoria aggiuntiva. Di solito, i guasti del sistema non sono gestite tramite la gestione delle eccezioni. Invece, si può essere in grado di utilizzare un evento come il dominio di applicazione.UnhandledException e chiamare l’Ambiente.FailFast metodo per accedere eccezione di informazione e di informare l’utente dell’errore prima che l’applicazione viene terminata.

Lascia un commento