簡體   English   中英

.NET中的錯誤和異常有什么區別?

[英]What is the difference between an error and an exception in .NET?

你能否向我解釋一下錯誤和異常之間的區別?

異常是從System.Exception類派生的類型的對象。 它在throw語句中用於將控制轉移到調用堆棧中某個地方的try塊中的catch子句。

錯誤只是您要解釋的一些代碼或消息。 錯誤代碼的問題是您可以決定忽略它們:

MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();

如果返回一個錯誤代碼,該調用將簡單地忽略錯誤代碼。 然而:

MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();

這是不可忽視的,並且會通過“ SomeCodeThatShouldNotExecuteOnError(); ”將控制權轉移到堆棧。

異常是一個利用語言語義的類。 正如其他人所說,異常會中斷執行堆棧直到被捕獲。 可以使用異常來傳達錯誤,但更常見的是用於表示已發生異常的事件。

另一方面,錯誤可能是例外與否。

有幾種錯誤:

  • 用戶錯誤 - 應該無異常地處理
  • 語法錯誤 - 這不應該在靜態類型語言中編譯(在動態語言中,它們有點難以發現)
  • 運行時錯誤 - 這將導致異常,或者無提示失敗(通常會產生意外結果)

實際上,異常應限於處理運行時錯誤,因為輸入錯誤數據的用戶不是“例外”。 要處理用戶錯誤,您應采取以下方法:

  • 防止輸入錯誤數據(前端驗證)
  • 防止壞數據被持久化(后端驗證)

應將異常用作用戶錯誤的“最后一道防線”。 如果您正在編寫持久層,則可以依賴異常來確保通過驗證而丟失的錯誤數據不會持久存在。 但是,您應該通過在驗證中添加一個修復程序來解決這些錯誤,從而防止錯誤首先發生。

通常,我將它們歸類為:

錯誤 - 是應用程序中的已知工作流程。 例如:身份驗證期間未提供的用戶名是錯誤。
應用程序可以處理這些情況,並且能夠向用戶顯示友好消息,以提示正確輸入和/或處理不同的數據。

異常 - 通常在離開系統時拋出和/或應用程序中發生意外情況。 例如:由於權限不足或文件不存在,打開文件句柄可能會引發異常。
通常在這種情況下,應用程序可以捕獲這些異常和/或編寫通用處理程序來處理系統中的所有異常。

根據經驗,如果您知道由於應用程序無法繼續工作而存在特定情況,請將其標記為錯誤並正常處理該情況。

所有剩余的“未知 - 未知”都可以歸入“例外”類別。

HTH。

您必須編寫代碼才能忽略的例外情況。 您必須編寫代碼以忽略的錯誤代碼。

如果沒有給定異常的異常處理程序,程序將停止執行並顯示錯誤消息。

未處理的異常是錯誤。 因此,所有錯誤都是例外,但事實並非如此。 異常處理技術處理異常/意外情況(錯誤),而錯誤是我們預期不會發生的情況,我們必須通過將用戶重定向到一些靜態HTML頁面並將其捕獲到Logs&來處理它們。想出了一個錯誤的解決方案。

錯誤可能發生在兩個級別

  • 頁面級別(使用頁面指令中的ErrorPage屬性)
  • 應用程序級別(需要在web.config中處理)

編譯CustomError ... CustomError錯誤....錯誤編譯注意 - 頁面級錯誤處理會覆蓋應用程序級錯誤處理。

異常處理: - >

例外 :當某個操作中的某個步驟失敗時,該操作中的所有后續步驟都不會被執行。 這是異常閃耀的地方。

錯誤:就像在第一種情況下你想要暫停當前代碼的執行一樣,但在此之前你需要釋放以前分配的任何資源。


說完了,

異常類具有HResult屬性 HRESULT是一個32位值,分為三個不同的字段:嚴重性代碼,設施代碼和錯誤代碼

看看這篇文章,將有助於您更好地理解

例外是報告和處理執行失敗的一種方式。 換句話說,它們用於傳達錯誤條件(在“ 框架設計指南”一書中解釋Krzysztof Cwalina)。

錯誤是事件。 Exception類表示在應用程序執行(運行時)期間發生的錯誤,並提供使用try catch塊處理它們的機制。 錯誤可能是運行時或編譯器錯誤。

錯誤事件的示例:System.Web dll的HttpApplication.Error事件,System.IO的FileSystemWatcher.Error事件兩個dll都具有相同的Error事件定義

public event EventHandler Error

來自.Net Framework 4.5文檔https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx

異常類表示在應用程序執行期間發生的錯誤。

錯誤和例外

出於各種原因可能會發生運行時錯誤。 但是,並非所有錯誤都應作為代碼中的異常處理。 以下是運行時可能發生的一些錯誤類別以及響應它們的適當方法。

使用錯誤。 使用錯誤表示程序邏輯中可能導致異常的錯誤。 但是,錯誤應該通過異常處理而不是通過修改錯誤代碼來解決。

程序錯誤。 程序錯誤是運行時錯誤,無法通過編寫無錯代碼來避免。

在某些情況下,程序錯誤可能反映預期或常規錯誤情況。 在這種情況下,您可能希望避免使用異常處理來處理程序錯誤,而是重試該操作。

在其他情況下,程序錯誤反映了可以在代碼中處理的意外錯誤情況。

系統故障。 系統故障是運行時錯誤,無法以有意義的方式以編程方式處理。 例如,如果公共語言運行庫無法分配額外的內存,則任何方法都可以拋出OutOfMemoryException異常。 通常,使用異常處理不會處理系統故障。 相反,您可以使用AppDomain.UnhandledException等事件並調用Environment.FailFast方法來記錄異常信息,並在應用程序終止之前通知用戶失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM