簡體   English   中英

C#在調用堆棧中捕獲未處理的異常

[英]C# Catch Unhandled Exception Down the Call Stack

我有一個程序,該程序具有許多功能,可以深度加載文件,由於加載損壞的文件的可能性,這些功能中的任何一個都有可能出錯。

我想嘗試捕獲在調用load函數的函數中加載這些文件時引發的任何未處理的異常。

是否可以在裝入過程中調用的每個函數中都沒有嘗試捕獲的情況下執行此操作?

try {
    var loadedFile = new LoadedFile(path);
    fileList.Add(loadedFile);
}
catch (Exception e) {
    Console.WriteLine("Error Loading File");
}

是的,它有可能。 只需用try catch包圍最上面的函數調用即可。 任何異常都將被拋出。 但是,您應該在發生它的函數中捕獲它,並且,如果可以的話,請修復該函數內部的異常原因。 如果不能,則程序必須失敗,因為它無法完成任務。

例如,如果文件損壞,則程序應失敗; 如果文件在另一個進程上對其具有鎖定,則可以等待該鎖定被釋放(假設它曾經被釋放),然后繼續操作,否則失敗。

未處理的異常會“阻塞”調用堆棧,直到捕獲它們為止,否則應用程序將引發未處理的異常錯誤。 您可以在較高級別的函數中放置一個try...catch塊,它將捕獲較低級別的異常。

例如:

public void CatchEmAll()
{
    try
    {
        DoSomethingExceptiony();
    }
    catch (Exception ex)
    {
        // handle the exception
    }
}

public void DoSomethingExceptiony()
{
    throw new Exception("Uh oh!");
}

在這種情況下,不會在該級別捕獲在DoSomethingExceptiony引發的異常,但是會在捕獲該異常的調用函數CatchEmAll

旁注: catch (Exception)來捕獲任何異常通常是一種不好的做法。 最好了解您的代碼可能拋出什么類型的異常,並僅處理那些異常。 例如,如果要加載文件,則可以專門捕獲FileNotFoundException ,但不能捕獲任何異常。

暫無
暫無

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

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