Python中if语句用法:finally语句的用法

这是一个非常基本的问题。在 Java 中,我使用 finally 语句关闭资源,因为“这是一个很好的做法”。我已经在 Javascript 中开发,然后在 Node.js 中开发了几年,我已经never使用了finally语句。我知道在 Node.js 中,我们所有人都遵循第一个参数错误处理模式。无论如何,

try{
    throw 123
}catch (e){
}finally{
    console.log(1)
}

.

try{
    throw 123
}catch (e){
}
console.log(1)

两者打印 1.

如果finally没有真正的好处,为什么它是一个关键字?清理代码可以放在 catch 中。

57

finally 不仅对异常处理有用,它还允许程序员避免清理代码被返回、继续或中断意外绕过。

有一个return了函数完成,但是finally中的console.log被调用,而最后一个console.log被跳过。

let letsTry = () => {
  try {
    // there is a SyntaxError
    eval('alert("Hello world)');
    
  } catch(error) {
    console.error(error);
    // break the function completion
    return;
  } finally {
      console.log('finally')
  }
  // This line will never get executed
  console.log('after try catch')
}
letsTry();
36

但试试这个:

try {
    throw "foo"
} catch (e) {
    throw "bar"
} finally {
    console.log("baz")
}
console.log("quux")

如果从catch块中抛出第二个错误,则try...catch块之后的代码将不会运行。
finally块将始终运行,即使catch块中存在错误。

此外,即使returnbreak语句停止trycatch块中的代码,finally块中的return语句也会运行try块中的return语句。

function foo() {
    try {
        return "bar";
    } finally {
        return "baz";
    }
}
foo() // "baz"
4

oracle docs提供了一个很好的答案。底线:最终总是被调用!即使您只捕获一种异常(而不是全局捕获),最后也会被调用(之后,如果没有其他捕获,您的应用程序可能会中断)

3

the finally block用于特殊目的。

finally 不仅对异常处理很有用-它允许程序员避免清理代码被 return,continue 或 break 意外绕过。将清理代码放在 finally 块中始终是一个很好的做法,即使没有预期的异常。

由于它不会影响您的业务逻辑,它仍然是编译器友好的,在内存方面。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(741)
Python使用什么来划分代码块:使用函数简化代码块 [Python]
上一篇
Log4j2远程代码执行漏洞修复:Log4j2漏洞和Lombok注释@ log4j2
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(7条)