如何最后使用try / catch编写错误处理块?

Eli*_*ado 0 javascript

我试图理解我课程中挑战的结果,但我坚持通过,因为结果与他们的期望不符。挑战任务是:

  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");
 }
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

该代码有两个主要问题:

  1. 您有错别字:var myErro = err;缺少r的结尾myErro

  2. 您正在尝试errfinally块中使用,但这仅在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");
 }
}
Run Code Online (Sandbox Code Playgroud)

(我添加了一个,console.log因此我们将看到错误情况。)

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


我应该指出,我不会那样写。在catch块中使用的finally块中声明变量确实可以var(因为var它不是块作用域的,而是被吊起的),但是它对试图维护代码的人产生了误导。如果要在这两个块中都使用变量,则为了清楚起见,将声明移到块外。