[racket] exception instead of EOF?
On Dec 26, 2011, at 2:46 AM, Dmitry Pavlov wrote:
> Hello,
>
> I would like to make read-byte and friends to
> throw an exception in case end of file is
> reached. That is, when I call read-byte,
> I know that the byte must be there, otherwise
> the input data is corrupt. I would prefer
> not to check the result of every read-byte
> call. What is the simplest way to achieve
> such a behavior?
I would just write a procedure that checks to see a byte is not an eof-object, and signals an error if required. Like this (including test cases):
#lang racket
(require rackunit)
;; given a stream, reads a byte, signalling
;; an error at the end of the file.
(define (read-byte/exn input-stream)
(define result (read-byte input-stream))
(cond [(eof-object? result)
(error 'read-byte/exn "expected byte, got #<eof>")]
[else result]))
(check-equal? (read-byte/exn (open-input-bytes #"ABC")) 65)
(check-exn exn:fail?
(lambda () (read-byte/exn (open-input-bytes #""))))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4624 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20111226/93d01ee8/attachment.p7s>