Skip to content

Try、Catch 与 Throw ​

异常表示无法作为函数正常结果继续处理的执行失败。可预期失败优先使用 Result<T, E>,异常机制不负责自动包装 Result。

norm
import std.core.Exception

try {
    loadConfiguration()
} catch IOException error {
    printLine(error.message)
} finally {
    closeResources()
}

Catch 选择 ​

catch 按源码顺序匹配异常的动态类型。更具体的类型必须写在更一般的类型之前;被前一个分支完全覆盖的 catch 是编译错误。

norm
try {
    readFile()
} catch FileNotFound error {
    printLine(error.path)
} catch IOException error {
    printLine(error.message)
}

Finally ​

finally 在 try 正常结束、return、throw、break 或 continue 后都执行。finally 自身产生的完成结果会替代原来的完成结果,因此不应在 finally 中执行复杂业务逻辑。

Throw ​

throw expression 要求表达式的静态类型是非 nullable、非泛型的 std.core.Exception class 或其子类。catch 参数遵循相同类型边界。Norm 当前不声明 checked exception;函数签名不列出 throws 集合。库仍应在文档中说明可能抛出的异常。

工具链运行时错误不属于这个名义类型体系,catch 不会截获它们。

资源类型应优先提供标准库的作用域清理抽象;在该 API 定稿前,规范示例使用显式 try/finally。

Norm 0.25