Custom Errors in Racket
Our first example demonstrates how to create custom errors in Racket. We’ll create a custom error type and use it in a function.
#lang racket
(require racket/format)
; Define a custom error structure
(struct arg-error (arg message) #:transparent)
; Define a function that may raise our custom error
(define (f arg)
(if (= arg 42)
(raise (arg-error arg "can't work with it"))
(+ arg 3)))
; Main function
(define (main)
(with-handlers ([arg-error?
(lambda (e)
(printf "Argument: ~a~n" (arg-error-arg e))
(printf "Message: ~a~n" (arg-error-message e)))])
(f 42))
(printf "Trying again with a different argument:~n")
(printf "Result: ~a~n" (f 10)))
(main)In this example, we define a custom error type using struct. The arg-error struct has two fields: arg and message.
We then define a function f that takes an argument. If the argument is 42, it raises our custom arg-error. Otherwise, it returns the argument plus 3.
In the main function, we use with-handlers to catch our custom error. This is similar to a try-catch block in other languages. If an arg-error is caught, we print its details.
To run this program, save it as custom-errors.rkt and use the racket command:
$ racket custom-errors.rkt
Argument: 42
Message: can't work with it
Trying again with a different argument:
Result: 13This example demonstrates how to create and use custom errors in Racket, providing more detailed error information when exceptions occur.