一个模块如何处理异常?
最理想,最好的用模块是没有异常,保证操作如预想的结果一致。
当操作无法成功完时,必然会产生错误,或异常。
一个是返回错误码,一个是抛出异常。
错误一般是立即处理,不然就是忽略错误。一般不会保存错误,然后统一处理。
异常的优点是可以处理,也可以继续抛出,由更上层进行统一处理。
可以抛出异常大大简化了库的开发者,碰到非正常情况不能外理了,就抛出异常。
这其实是将错误处理交给了库调用者。
对于抛异常的函数,头疼的是一般无法知道它的所有异常,无法精确处理其所有异常,
只能针对个别异常进行处理。
因为该函数一般只能知道自己抛什么异常,但不能确定其调用的函数会抛什么异常。
一般函数声明中的异常指示总是不存在的。
如果对这样的函数来一个try/except(...)接所有错误,那么异常就退化为错误处理。
而返回错误总是确定的,返回哪些错误号是必须明确的。
对于本函数所调用的函数的错误总是已经处理了,而不是像异常那样直接抛出。
理想的库是两者都要,如STL的iostream库,可以抛异常,也可以查询是否错误。
std::iostream默认是不抛异常。
(转载请注明来源于金庆的专栏)