编程语言 · 2023年 10月 28日 0

异常

54 次浏览

人生和世界总是充满着不意外,争议、冲突和战争似乎是人类必然经历的过程。程序执行也有不满的时候。

不同编程语言的异常

  • Ada/Modula-3是早期引入异常处理的语言。
  • C语言没有标准意义的异常,使用goto或setjmp模拟错误或异常发生时的处理流程。
  • ObjC/C++/Java/C#/Python/Kotlin 等语言均有比较完整的异常处理语言标准,概念上是try...catch...finally.
    • ObjC 还提供了 NSError 用于处理异常。
  • Python 还提供else模式:try ... except ... else ..., 当try语句块没有异常,会执行else语句块。

手动触发异常

  • Python可以用raise手动触发异常。

try语句块和catch语句块中间可以有代码吗?

  • ObjC 不允许两者之间有代码,否则会报编译错误。

try语句块和catch语句块内部有return语句会影响执行flow吗?

  • ObjC @try 或@catch 语句块 return 语句会影响执行flow,但 @finally 语句块一定被执行。不管是@try还是@catch或者@finally语句块用return语句返回,@finally语句块之后的语句一定不会被执行。

更简洁的异常处理

  • Python提供with语句可以减少出错代码异常处理,不需要手动在发生异常时特别关闭打开的文件。with语句本质上是实现了__enter__和__exit__上下文管理器协议,Python根据with语句开始执行和退出(包含异常退出)执行__enter__和__exit__完成清理。
    • 注意,with 语句并没有处理异常,当会发生异常时,就会抛出异常。