2017-08-30 154 views
0

问:定义自定义异常的基类

什么是需要定义一个基类来处理错误?

背景:

我是通过文档阅读User-Defined Exception Handling当我把它们定义class Error(Exception)的例子注意到。其余的类都是它的所有子类。

当我定义自定义异常时,我只写了class MyExc(Exception)并且从不定义基类。

我不明白,特别是在他们的例子中,当它只是通过时,需要定义class Error(Exception)。是的,他们可能只是raise Error对于一个特定的情况,但他们不能像其他两个例外定义ExceptionError的子类?

+1

...因为现在你可以捕获'错误'而不必单独捕获每一个。 –

+0

@ IgnacioVazquez-Abrams为什么要单独定义它们,如果你不想特意捕捉它们呢? – datta

+0

有时你想,有时候你不想。 –

回答

0

当您编写一个库时,您通常会为所有异常定义一个基本异常类,以便用户可以简单地同时处理它们,例如,

MyLib中

class MyError(Exception): 
    pass 

一些其他的代码

try: 
    ... 
except MyError: 
    # MyLib error, handle it 

但说实话这 “LIB具体的” 操作很少发生(通常你要么赶上一个特定的异常,或只是抓全部为except Exception:)。所以我想这并不重要。更多的是风格问题。

+1

如果你抓住'Exception',那么你就是在做错了(除非它是你的工作,它几乎从不)。 –

+0

@ IgnacioVazquez-Abrams哈哈,为什么?因为互联网这么说? :D – freakish

+0

因为它没有告诉你任何有关例外的事情,它捕捉到的不是你的责任的例外。 –