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

Dart构造函数抛出的异常无法捕获?正确捕获方法是什么?

Dart中捕获构造函数抛出的异常的正确方式

你的代码里异常没被捕获的核心原因是抛出的异常类型和catch块捕获的类型不匹配:

  • 构造函数里throw 'Exception'抛出的是一个字符串类型的值
  • 而on Exception catch (e)只负责捕获Exception类(以及它的子类)的实例,字符串不属于这个范畴,所以catch块不会触发。

下面是两种正确的解决方式:

方法一:抛出标准Exception实例

把构造函数里的抛出语句改成抛出Exception类的实例,这样原来的catch块就能正常捕获:

class MyClass{
  MyClass(){
    throw Exception('发生异常'); // 抛出Exception实例
  }
}

testCatchException(){
  try {
    MyClass myClass = MyClass();
  } on Exception catch (e) {
    print('Exception caught: ${e.toString()}');
  }
}

方法二:捕获所有类型的异常

如果需要捕获包括字符串、数字等非Exception类型的异常,可以去掉类型限制,或者明确捕获Object类型(Dart中所有类型都继承自Object):

class MyClass{
  MyClass(){
    throw 'Exception'; // 依然抛出字符串
  }
}

testCatchException(){
  try {
    MyClass myClass = MyClass();
  } catch (e) { // 无类型限制,捕获所有异常
    print('Exception caught: $e');
  }
}

或者用on Object catch (e),效果和上面一致,更明确:

try {
  MyClass myClass = MyClass();
} on Object catch (e) {
  print('Exception caught: $e');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:33:08