在开发库时断言vs异常

时间:2010-09-09 08:31:04

标签: exception assert

我正在开发一个库,以便在其他库或最终产品中进一步使用。假设用户以错误的方式使用库 - 将不适当的值传递给公共函数,以错误的顺序调用函数等。

在这种情况下,我可能会抛出异常,但这些通常是为最终产品设计的,必须妥善处理,而在这里我们有一个开发人员错误,他们没有正确阅读文档。另一方面,他或她是我的库的用户,因此断言可能是一个错误的方法(想象一个在您从未编写过的代码中被解雇的断言)。

到目前为止,我一直在私有内部函数和方法中使用断言,因此仅通过通知库中的我的错误。在库用户使用错误的情况下,我总是抛出一个带有错误描述的异常(并建议如何避免它)。

你认为这是一种正确的方法吗?如果没有,那么在开发库时,您使用的是断言和异常的经验法则吗?

2 个答案:

答案 0 :(得分:5)

是的,这是正确的方法。断言可以在私有函数中内部使用。在客户端使用不正确的参数调用公共方法的情况下,应该抛出异常。不正确的代码必须立即崩溃程序,这是修复错误的最佳机会。 对于预期的情况(文件未找到,设备没有响应等)和调用程序错误(如错误的参数值),最好有不同的异常类型。客户端代码应该捕获预期的异常,使未处理的意外异常。抛出意外异常时,客户端程序崩溃,程序员只修复错误。

但是,如果您的库是为同一公司内部使用而编写的,则可以使用断言处理私有的公共方法调用错误。但是这种方法必须受到严格限制,不应该用于外部客户。

答案 1 :(得分:1)

断言在发布程序集中不起作用,异常是向库用户发出错误信号的唯一方法