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 方法将使用 RangeError,如果其 startIndex 不在 0..length 范围内,这可以通过 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
抛出带有相关堆栈跟踪的error