why should we use Exception as a superclass, why n

2019-02-24 03:22发布

In python, whenever we are writing User-defined exception, we have to extend it from class Exception. my question is why can't we extend it from BaseException which is super-class of exception hierarchy and Exception is also subclass of BaseException.

2条回答
来,给爷笑一个
2楼-- · 2019-02-24 03:31

BaseException includes things like KeyboardInterrupt and SystemExit, which use the exception mechanism, but which most people shouldn't be catching. It's analogous to Throwable in Java, if you're familiar with that. Things that derive directly from BaseException are generally intended to shut down the system while executing finally blocks and context manager __exit__ methods to release resources.

查看更多
趁早两清
3楼-- · 2019-02-24 03:39

Per the Python2 documentation, there are four exceptions that are derivatives of BaseException:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception

The three that are not Exception are not actually errors, which means in general you don't want to catch them as if they are errors. BaseException was added in Python2.5 (before that, there was no BaseException and the other exceptions were subclassed from Exception).

查看更多
登录 后发表回答