Todo esto es similar más o menos como se hace en otros lenguajes, pero definir los tipos de errores permitidos es algo único.