You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart自定义异常调用errMsg方法报错:Object类无该方法

问题原因

使用catch (e)时,Dart会将e的类型默认推断为Object,而Object类并没有定义errMsg方法,因此调用e.errMsg()会触发报错。

解决方法

方法1:指定捕获的异常类型

在catch前添加on AmtException,明确捕获AmtException类型的异常,此时e的类型会被识别为AmtException,可直接调用errMsg方法:

class AmtException implements Exception {
  String errMsg() => 'Amount should not be less than zero';
}

void main() {
  try {
    var amt = -1;
    if (amt < 0) {
      throw AmtException();
    }
  } on AmtException catch (e) {
    print(e.errMsg());
  }
}

方法2:强制类型转换

在调用方法前将e强制转换为AmtException类型:

class AmtException implements Exception {
  String errMsg() => 'Amount should not be less than zero';
}

void main() {
  try {
    var amt = -1;
    if (amt < 0) {
      throw AmtException();
    }
  } catch (e) {
    print((e as AmtException).errMsg());
  }
}

方法3:重写toString方法(推荐)

Dart的Exception接口通常通过重写toString来提供错误信息,这种方式更符合Dart异常的使用习惯,无需额外定义方法:

class AmtException implements Exception {
  @override
  String toString() => 'Amount should not be less than zero';
}

void main() {
  try {
    var amt = -1;
    if (amt < 0) {
      throw AmtException();
    }
  } catch (e) {
    print(e);
  }
}

错误信息翻译

dart/exceptions.dart:81:11: 错误:方法 'errMsg' 未在类 'Object' 中定义。'Object' 来自 'dart:core'。请尝试将名称更正为现有方法的名称,或者定义一个名为 'errMsg' 的方法。error.errMsg();

内容的提问来源于stack exchange,提问作者Ritesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:58:11