我正在努力提高例外情况,就像我过去常常来自C#背景一样。
我有一个实用程序函数,它希望输入值在一个非常特定的范围内,如外部标准所定义。如果在该范围之外提供了一个值(并且在该范围的中间有一个值也是无效的),那么我想向调用者引发一个异常,以便它们中断。
据我所知,语法为raise Invalid_Argument;
但是 - 是否可以提供包含例外的消息?例如Invalid_Argument
异常在某种程度上是不言自明的,但我可以看到进一步详细说明参数的错误。如何编写一条简短的错误消息以阻止异常?
答案 0 :(得分:4)
它使用(Ada 95)你必须写
Ada.Exceptions.Raise_Exception (Invalid_Argument’Identity,
"message");
(见Ada95RM 11.4.2(6))但自从Ada 2005以来你就能说出来了
raise Invalid_Argument with "message";
(A2005RM 11.3)。
请注意,字符串部分是一个字符串 expression ,因此如果有用,您可以添加一些内容来描述实际的无效值。
答案 1 :(得分:3)
首先,您可以定义[sub]类型
[sub]type Valid_Range_For_X is [Integer] range 23 .. 2001;
这将自动捕获大多数无效值。如果您使用的是Ada 12,则可以添加
[sub]type Valid_Range_For_X is [Integer] range 23 .. 2001 with
Dynamic_Predicate => Valid_Range_For_X /= 42;
也将捕获内部无效值。让语言为你做这样的检查通常比手动做更好。
如果您使用的是早期版本的Ada,则必须手动检查内部值。我通常更喜欢将细粒度的异常用于许多事物的一般异常,由异常消息区分。所以我会提出像
这样的东西X_Is_42
而不是
Invalid_Argument with "X is 42"
这使得更容易区分42个案例和(通常很多)其他类型的无效参数。我意识到不是每个人都同意这一点。