Error

在程序出现错误时抛出的错误对象。

Error 对象代表程序员本应避免的程序错误。

示例包括使用无效参数调用函数,甚至使用错误数量的参数调用,或者在不允许的时间调用它。

这些不是调用者应期望或捕获的错误——如果发生,程序有误,终止程序可能是最安全的响应。

当决定一个函数应该抛出错误时,应明确描述其发生条件,并且这些条件应该是可检测和可预测的,以便使用此函数的程序员可以避免触发错误。

此类描述通常使用“必须”或“禁止”等词语来描述条件,如果在函数的文档中看到这样的词语,则不满足这些要求很可能导致抛出错误。

示例(来自 String.contains

`startIndex` must not be negative or greater than `length`.

在这种情况下,如果 startIndex 为负或太大,将抛出错误。

如果在调用函数之前无法检测这些条件,则被调用的函数不应抛出 Error。它仍然可以抛出,但调用者必须捕获抛出的值,实际上使其成为一个替代结果而不是错误。如果是这样,我们认为抛出的对象是一个 异常 而不是错误。抛出的对象可以选择实现 Exception 以记录它表示一个异常,但不是错误的发生,但实现 Exception 除了记录外没有其他作用。

Dart 中可以抛出所有非 null 值。扩展 Error 类的对象会特别处理:第一次抛出时,会记录并存储抛点处的堆栈跟踪,存储在错误对象中。可以使用 stackTrace getter 获取它。仅实现 Error 而不扩展它的错误对象不会自动存储堆栈跟踪。

错误对象还用于系统范围内的失败,如堆栈溢出或内存不足的情况,用户也不期望捕获或处理这些失败。

由于错误不是为被捕获而创建的,因此没有必要让子类区分错误。相反,创建子类是为了使相关错误组易于通过一致的错误消息创建。例如,如果 String.contains 方法的 startIndex 不在 0..length 范围内,它将使用 RangeError,这可以通过 RangeError.range(startIndex, 0, length) 程序创建。捕获 Error 的特定子类不是预期的,也不应该在测试您自己的代码之外发生。

实现者

构造函数

Error()

属性

hashCode int
此对象的哈希码。
没有设置器继承
runtimeType Type
对象的运行时类型的表示。
没有设置器继承
stackTrace StackTrace?
该错误首次抛出时的堆栈跟踪。
无设置器

方法

noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
toString() String
此对象的字符串表示形式。
继承

运算符

operator ==(Object other) bool
等号运算符。
继承

静态方法

safeToString(Object? object) String
安全地将值转换为 String 描述。
throwWithStackTrace(Object error, StackTrace stackTrace) → Never
抛出带有相关堆栈跟踪 stackTraceerror