在使用 FXCop 分析一些遗留代码时,我想到在 try block 中捕获一般异常错误真的那么糟糕,还是应该寻找特定的异常。请考虑一下明信片。
请您参考如下方法:
显然,这是唯一真正答案是“视情况而定”的问题之一。
它主要取决于你在哪里捕获异常。一般来说,库在捕获异常方面应该更加保守,而在程序的顶层(例如在主方法中或在 Controller 中的操作方法的顶部等),您可以对捕获的内容更加自由。
这样做的原因是,例如您不想捕获库中的所有异常,因为您可能会掩盖与您的库无关的问题,例如“OutOfMemoryException”,您确实希望它冒泡,以便可以通知用户等。另一方面另一方面,如果您正在讨论在 main() 方法中捕获异常,该方法捕获异常,显示它然后退出......好吧,在这里捕获任何异常可能都是安全的。
关于捕获所有异常的最重要规则是,您永远不应该默默地吞下所有异常......例如Java 中是这样的:
try {
something();
} catch (Exception ex) {}
或者Python中的这个:
try:
something()
except:
pass
因为这些可能是最难追踪的问题。
一个好的经验法则是,您应该只捕获您自己可以正确处理的异常。如果您无法完全处理异常,那么您应该让它冒泡给可以处理的人。