The reason that Exception is a trap is because there's 2 types of errors: - Errors - Defects Defects are the kind of thing that absolutely should crash your application. Like accessing a region of memory you never should've ever touched etc. For some reason Defects were made to inherit from Exception the same as normal Errors. So Errors inherit this way: Exception => CatchableError => SomeSpecificError Defects go: Exception => Defect => SomeSpecificDefect