Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Catching errors (Unix-Module)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Hendrik Tews <tews@t...>
Subject: Re: [Caml-list] Catching errors (Unix-Module)
Oliver Bandel writes:
   Date: Tue, 16 Apr 2002 15:04:34 +0200 (MET DST)
   Subject: Re: [Caml-list] Catching errors (Unix-Module)
   
   OK, let's try it:
     [...]   

   This expression has type unit but is here used with type Unix.stats

   Or is there a general problem with that code?
   
Well, the catch has to return something compatible with
Unix.stat. So you can try

1. use optional values 

    try
     Some (Unix.stat "/foo/bar")
    with
    | Unix.Unix_error (code, func, file) ->
      Printf.fprintf stderr "Couldn't %s '%s': %s!\n"
	func file (Unix.error_message code);
      None
    ;;

2. reraise the exception

    try
     Unix.stat "/foo/bar"
    with
    | Unix.Unix_error (code, func, file) as exec ->
      Printf.fprintf stderr "Couldn't %s '%s': %s!\n"
	func file (Unix.error_message code);
      raise exec  
    ;;
   
3. raise another exception

    exception MyUnixException;;
    try
     Unix.stat "/foo/bar"
    with
    | Unix.Unix_error (code, func, file) as exec ->
      Printf.fprintf stderr "Couldn't %s '%s': %s!\n"
	func file (Unix.error_message code);
      raise MyUnixException
    ;;


In case you get an error like 

      Reference to undefined global `Unix'

you have to built a toplevel containing the unix module:

  /usr/local/ocaml-3.01/bin/ocamlmktop -o mytop unix.cma


Bye,

Hendrik
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners