[英]Where to best place a throw in code
我正在根據網絡中的幾個來源編寫一些異常處理最佳實踐。 從 Microsoft 網頁( https://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx )我得到了建議:
“堆棧跟蹤開始於拋出異常的語句,結束於捕獲異常的 catch 語句。在決定放置 throw 語句的位置時請注意這一事實。”
我不太清楚這是什么意思。 我們能否說“拋出”的最佳位置盡可能靠近所討論的呼叫? 這是正確的還是有人有其他建議?
編輯:我會更准確。 請參閱下面的偽代碼
// do something that assignes a value to 'someValue'
// do more that's not related to the call above
if (someValue == whatever)
{
throw new MyException();
}
我假設當我在有問題的調用之后做其他事情(做某事)之后拋出異常時,我不會得到正確的堆棧跟蹤,將我指向正確的行。 我對嗎?
“堆棧跟蹤開始於拋出異常的語句,結束於捕獲異常的 catch 語句。在決定放置 throw 語句的位置時請注意這一事實。”
如果以下代碼未包含在try-catch
塊中,則調試器將為您提供堆棧跟蹤,其中最頂部的項目指向DivideTwoNumbers()
函數,因為它是發生異常的地方。 此行之后的所有其他代碼: double quotient = DivideTwoNumbers(10, 0);
不會執行,這意味着您擁有的所有其他 throw 語句都將無用。 假設您期望在AnotherFunction()
出現異常,您是否能夠捕獲異常或是否將AnotherFunction()
包含在堆棧跟蹤中? 答案是不。
static void Main(string[] args)
{
try
{
double quotient = DivideTwoNumbers(10, 0);
AnotherFunction();
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
static int DivideTwoNumbers(int dividend, int divisor)
{
if (divisor == 0)
throw new DivideByZeroException();
return dividend / divisor;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.