我很有兴趣了解除try / catch及其变体之外的编程语言中的其他错误处理方法。
有谁知道这种错误处理的一些有趣案例?
答案 0 :(得分:3)
嗯,还有很好的旧版
ON ERROR RESUME NEXT
此外,一些编程语言(一些Lisps和Schemes,可能是Smalltalk)将从转义中引发异常(即展开堆栈)。也就是说,在某些情况下,可能会在引发异常的情况下处理异常并继续计算---这些异常称为可持续异常。
答案 1 :(得分:3)
一般来说,错误处理策略似乎可以分为三类:
ON ERROR RESUME NEXT
,如Ryan所说)abort()
来阻止程序冷却),或采取异常处理或类似的形式。备用控制流有许多实现和样式。一种是POSIX信号,通常会导致默认终止程序。 Visual Basic还在ON ERROR GOTO
中有一个备用控制流工具。
Perl使用die
组合备用控制流和返回码,导致程序终止,在子解释器中,在die
'块中运行eval
会导致错误代码在调用代码中设置。
然后,当然,还有传统的异常处理,以及Common Lisp的可重启/可恢复异常等变体。甚至信号/ abort()
方法和ON ERROR GOTO
也可以被认为是原始异常处理系统。因此,广泛地考虑异常,大多数替代控制流错误处理系统可以被认为是某种形式的异常处理。
实际上,实现异常会打开一组有趣的设计空间。语言实现有几种方法可以做到:
die
并检查错误变量$?
- 是此方法的手动版本。执行此操作的编程语言使用返回代码错误处理方法来实现异常,并可以通过try-catch构造公开它们; Vala就是一个很好的例子。condition-case
构造所做的事情 - 错误处理程序在不展开堆栈的情况下运行,然后指示是通过重试还是通过展开来处理错误。因此,总结一下:有三种基本方法:忽略错误,返回代码和各种类似异常的工具。但是在类似异常的工具的空间内,语义或接口以及实现这些语义都有多种选择。
答案 2 :(得分:2)