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

为何含assert()的Dart代码未抛出错误?

问题原因及解决办法

核心原因:Dart断言默认未启用

Dart的assert()语句默认仅在开发/调试模式下生效,默认运行的生产模式会直接跳过断言代码。所以你输入无效字符串时,age为null,但断言未触发,代码继续执行到后续打印语句。

验证断言的方法:启用断言运行

运行代码时添加--enable-asserts参数,命令示例:

dart run --enable-asserts your_script.dart

此时输入nnnnn,断言就会触发,抛出Assertion failed: "Age cannot be null"的错误。

更可靠的输入校验方式:不依赖断言

如果希望在任何运行模式下都能捕获无效输入,不要依赖assert(),改用条件判断主动抛出异常,这样能被你的catch块捕获:

void main(List<String> arguments) {
  print('Enter your age: ');
  try {
    int? age = int.tryParse(stdin.readLineSync()!);
    print('Age is $age');
    if (age == null) {
      throw ArgumentError('Age cannot be null');
    }
    print('You are $age years old');
  } catch (e) {
    print('You gave us a bad age');
  }
}

修改后无论是否启用断言,输入无效内容都会进入catch块,输出预期的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:04