在开发库时断言vs异常

Ser*_*rov 4 assert exception

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

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

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

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

Ale*_*x F 5

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

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