我正在为OCP 7做准备,我在其中一本证书簿上遇到了这篇文章。
为了阻止您尝试将断言替换为异常,AssertionError不提供对生成异常的对象的访问。你得到的只有字符串信息。
我尝试了很多可能性来执行正在说的话,但是我发现在AssertionError上和其他人没有什么不同。
你能向我解释一下这句话的意思吗?
发布于 2015-11-28 11:41:08
在文件中的常见问题的assert关键字中可以找到解释:
为什么AssertionError不允许访问生成它的对象?同样,为什么不将一个任意对象从断言传递到AssertionError构造函数而不是一个详细消息呢? 对这些对象的访问将鼓励程序员尝试从断言失败中恢复,这违背了工具的目的。
考虑以下代码:
int i = 0;
assert i != 0 : "i must not be zero"如果启用断言,这将引发一个AssertionError,并将消息初始化为"i must not be zero"。但所有这些错误都会包含。如果它包含更多的信息,它将鼓励开发人员通过捕获AssertionError来从错误中恢复。从理论上讲,仍然可以检查错误消息并尝试使用它来做一些事情,但是这样做实际上违背了每一个良好的实践。
https://stackoverflow.com/questions/33970748
复制相似问题