簡體   English   中英

如何最后使用try / catch編寫錯誤處理塊?

[英]How to write an error handling block using try/catch and finally?

我試圖理解我課程中挑戰的結果,但我堅持要通過,因為結果與他們的期望不符。 挑戰任務是:

  1. 編寫一個try / catch塊來嘗試控制台日志myVar,該行為應故意未定義,以便生成錯誤。Catch錯誤。
  2. 在catch塊中,將整個錯誤存儲在變量myError
  3. 在catch塊中,將錯誤的名稱存儲在變量myErrorName
  4. 在catch塊中,將錯誤消息存儲在變量myErrorMessage編寫一個finally塊,檢查是否存在myError
  5. 如果是這樣,請定義一個變量result,其值如下:發生錯誤(myErrorName: myErrorMessage)
  6. 如果不是,則定義相同的變量,結果,但為其分配值“未發生錯誤!”。

我的方法如下:

try{
  myVar();
}
catch(err){
  var myError = err;
  var myErrorName = err.name;
  var myErrorMessage = err.message;
}
 finally{
  if(myError == err){
    var result = "There was an error (myErrorName:myErrorMessage)";
 }else{
    console.log("No error ocurred");
 }
}

該代碼有兩個主要問題:

  1. 您有一個錯字: var myErro = err; myErro的末尾缺少r

  2. 您正在嘗試在finally塊中使用err ,但這僅在catch塊的范圍內。

...然后還有其他一些與作業似乎不符的地方告訴您要做

  1. 您沒有在做#1,而是在做其他事情,巧合的是,這也嘗試使用myVar

  2. 您沒有實現#6的任何代碼。

  3. 發生錯誤時,代碼分配result是將myErrorNamemyErrorMessage逐字放置在字符串中,而不是使用這些變量的值。

  4. 當您未發生任何錯誤時,您所收到的消息與他們告訴您使用的消息有所不同,它有細微的差別(包括錯字)。 編程至少部分是關注細節。 :-)

您不需要if (myError == err) ,就if (myError)可以做到:

 try{ myVar(); } catch(err){ var myError = err; var myErrorName = err.name; var myErrorMessage = err.message; } finally{ if(myError){ var result = "There was an error (myErrorName:myErrorMessage)"; console.log(result); }else{ console.log("No error ocurred"); } } 

(我添加了console.log所以我們會看到錯誤情況。)

我在上面只提到了#1和#2,其余的作為練習供您完成。 :-)


我應該指出,我不會那樣寫。 var塊中使用在finally塊中使用的catch塊中聲明變量確實可以對var起作用(因為var不受塊作用域並且是懸掛的),但是這對試圖維護代碼的人產生了誤導。 如果要在這兩個塊中都使用變量,則為了清楚起見,將聲明移到塊外。

選中它會起作用

try{
  console.log(myVar);
}
catch(err){
  var myError = err;
  var myErrorName = err.name;
  var myErrorMessage = err.message;
}
 finally{
  if(myError){
    var result = "There was an error ("+ myErrorName+": "+myErrorMessage+")";
 }else{
   result = "No error ocurred";
 }
}

暫無
暫無

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

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