flutter - Dart 中的 assert()、异常、错误有什么区别?
问题描述
根据以下资源: https ://api.dart.dev/stable/2.4.0/dart-core/Exception-class.html https://api.dart.dev/stable/2.4.0/dart-core /Error-class.html https://groups.google.com/a/dartlang.org/g/misc/c/lx9CXiV3o30/m/s5l_PwpHUGAJ?pli=1 https://groups.google.com/a/dartlang .org/g/misc/c/lx9CXiV3o30/m/s5l_PwpHUGAJ?pli=1
我非常清楚 anException
和 an之间的区别是什么Error
:
- 当程序员犯了一个
Error
错误并且他应该修复那个错误时,应该抛出一个。示例:确保方法的参数不为空。 Exception
当它打算捕获异常并处理它时,应该抛出一个。示例:执行了数据库调用,但没有可用的 Internet 连接
我也理解断言是如何工作的。在生产代码中删除了所有断言语句。一个失败assert
的语句抛出一个AssertionError
,这是有道理的,因为一个失败的断言总是程序员的错。
但是现在出现了以下问题:(问题 1)我什么时候应该抛出一个Error
(或 的子类Error
),什么时候应该使用 assert 语句?这两个概念的目的是提醒程序员他犯了一个错误。
给定以下方法(请假设一个更复杂的用例):
void test(Test test){
// assert or throw ArgumentError here?
test.abc();
}
我可以确保满足该方法的先决条件,使用assert(test != null)
,或通过if(test == null) throw ArgumentError.notNull("test");
。在这两种情况下,程序在生产中都会失败,但是在使用 assert 时,我得到 aNoSuchMethodError
因为断言已被删除,而在抛出 an 时,ArgumentError
它更详细,因为ArgumentError
直接指向底层问题(该方法以 null 作为参数调用)。
如上所示,程序在生产中的两种情况下都失败了。但是抛出错误会提供有关问题原因的更多详细信息。
(问题2)为什么Flutterassert
到处都用,而不是抛出Errors?
解决方案
推荐阅读
- angular - 如何从子路线导航到父路线(角度)
- php - 在php中将CSS字符串转换为数组
- javascript - 如何在 Vue js 中解析 json 以在模板中使用它
- pandas - 如何使用熊猫中的列表对数据框进行排序
- javascript - 如何使用 echarts 库在每个条的左侧设置 x 轴刻度?
- c++ - 在 C++ 中加速读取/处理日志文件
- node.js - {URL} 处的 net::ERR_ADDRESS_UNREACHABLE
- json - SwiftUI - 来自 GitHub REST API 的 JSON 无法解析
- python - 为 python 安装 dlib 模块时出现问题?
- javascript - 当表单保存在php中时检查数据库中的表