【问题标题】:Difference between two exception handling两种异常处理的区别
【发布时间】:2019-10-22 13:07:02
【问题描述】:

我是 python 新手,对我正在编写的一些代码的异常处理有所了解。遇到了两种处理异常的方法,可以避免捕获键盘中断的问题,并想知道以下两种方法之间是否存在显着差异。

except (KeyboardInterrupt, SystemExit):
    raise
except:
    some code...

except Exception as e: 
    some code...

我了解到他们都避免捕获键盘中断,但我只是好奇他们是否只是在语法上不同并且做同样的事情,或者在某些情况下使用一个比另一个更有优势,谢谢。

【问题讨论】:

  • 嗨,我认为它们本质上是相同的——两者都只捕获作为Exception 子类的异常。仅在第一个中,您还捕获了您立即提出的KeyboardInterruptSystemExit - 所以这是不必要的(如果您不对它们进行任何处理)。在第二种情况下,您将 Exception 实例保存为 e,这对于某些日志记录等很有用。但您也可以在第一种情况下这样做。

标签: python-3.x exception


【解决方案1】:

好吧,在您的第一个示例中,您只捕获了两个异常,而在您的第二个示例中,您正在捕获程序可能给出的所有异常。

因此,如果您尝试使用不在字典中的键从字典中获取值,您将得到KeyError,它不会被第一个示例捕获,并且程序会崩溃。

在第二个示例中,它会被捕获。

什么是最好的?好吧,请始终尝试处理与您将要执行的操作相关的异常,因此请像第一种情况一样具体。

【讨论】:

  • 嗨,我不认为你是正确的,因为他在这两种情况下都捕获了所有 Exception 子类的情况。在第一个使用裸除外,在第二个使用except Exception as eKeyboardInterupt 不是 Exception 的子类,因此未被捕获。
  • @MarekSchwarz 你是对的,我只是在添加答案之前快速回答。谢谢指正
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2014-05-11
  • 2015-12-15
  • 1970-01-01
  • 2012-06-10
相关资源
最近更新 更多