为了账号安全,请及时绑定邮箱和手机立即绑定

抓住一个普遍的例外真的那么糟糕吗?

抓住一个普遍的例外真的那么糟糕吗?

在使用FXCop分析某些旧代码时,我想到的是,在try块中捕获一般的异常错误确实很不好,或者您是否正在寻找特定的异常。请在明信片上提出想法。
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

显然,这是唯一的答案是“取决于”的问题之一。


它主要取决于您在哪里捕获异常。通常,库应该在捕获异常时更加保守,而在程序的顶层(例如,在主方法中或在控制器的action方法的顶部等)中,捕获的内容可以更加自由。


这样做的原因是,例如,您不想捕获库中的所有异常,因为您可能掩盖了与库无关的问题,例如“ OutOfMemoryException”,您实际上更喜欢冒泡,以便用户可以另一方面,如果您正在谈论的是在main()方法中捕获异常的方法,该方法捕获异常,先显示该异常,然后退出...好吧,在这里捕获几乎所有异常都是安全的。


捕获所有异常的最重要规则是,您绝不应该默默地吞下所有异常……例如,Java中这样的代码:


try { 

    something(); 

} catch (Exception ex) {}

或在Python中:


try:

    something()

except:

    pass

因为这些可能是一些最难追踪的问题。


一个好的经验法则是,您应该只捕获可以正确处理的异常。如果您不能完全处理异常,则应让它冒犯给可以处理的人。


查看完整回答
反对 回复 2019-10-18
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

除非您在应用程序的前端进行一些日志记录和清理代码,否则我认为捕获所有异常是不好的。

我的基本经验法则是捕获您期望的所有异常,而其他任何东西都是错误。

如果您抓住了一切并继续前进,那有点像在汽车仪表板上的警告灯上贴上膏药。您再也看不到了,但这并不意味着一切都OK。


查看完整回答
反对 回复 2019-10-18
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

是! (除了您应用程序的“顶部”)


通过捕获异常并允许代码执行继续,您表示您知道如何处理和规避或解决特定问题。您是在说这是可恢复的情况。捕获Exception或SystemException意味着您将捕获诸如IO错误,网络错误,内存不足错误,代码丢失错误,空指针取消引用之类的问题。说您可以处理这些是一个谎言。


在一个组织良好的应用程序中,这些不可恢复的问题应在堆栈中较高的位置处理。


另外,随着代码的发展,您不希望函数捕获新的异常,该异常将来会添加到被调用的方法中。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 416 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信