From d4a381318f8bf5b0d41d7a1a6d7a4cefade8a44a Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Fri, 12 Mar 2021 08:50:42 +0100
Subject: [PATCH] Catch unexpected failures.

---
 model.ml | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/model.ml b/model.ml
index 19ca382..8fc7eb5 100644
--- a/model.ml
+++ b/model.ml
@@ -153,26 +153,28 @@ let handle_nnet_range_values n_inputs in_channel =
 let retrieve_nnet_metadata filename =
   let open Result in
   let in_channel = Stdlib.open_in filename in
-  handle_nnet_header filename in_channel >>= fun () ->
-  handle_nnet_basic_info in_channel >>= fun (n_ls, n_ins, n_outs, max_l_size) ->
-  handle_nnet_layer_sizes n_ls in_channel >>= fun layer_sizes ->
-  handle_nnet_unused_flag in_channel >>= fun () ->
-  handle_nnet_min_input_values n_ins in_channel >>= fun min_input_values ->
-  handle_nnet_max_input_values n_ins in_channel >>= fun max_input_values ->
-  handle_nnet_mean_values n_ins in_channel >>= fun mean_values ->
-  handle_nnet_range_values n_ins in_channel >>= fun range_values ->
-  Stdlib.close_in in_channel;
-  Ok
-    { n_layers = n_ls;
-      n_inputs = n_ins;
-      n_outputs = n_outs;
-      max_layer_size = max_l_size;
-      layer_sizes;
-      min_input_values;
-      max_input_values;
-      mean_values;
-      range_values; }
-
+  try
+    handle_nnet_header filename in_channel >>= fun () ->
+    handle_nnet_basic_info in_channel >>= fun (n_ls, n_ins, n_outs, max_l_size) ->
+    handle_nnet_layer_sizes n_ls in_channel >>= fun layer_sizes ->
+    handle_nnet_unused_flag in_channel >>= fun () ->
+    handle_nnet_min_input_values n_ins in_channel >>= fun min_input_values ->
+    handle_nnet_max_input_values n_ins in_channel >>= fun max_input_values ->
+    handle_nnet_mean_values n_ins in_channel >>= fun mean_values ->
+    handle_nnet_range_values n_ins in_channel >>= fun range_values ->
+    Stdlib.close_in in_channel;
+    Ok
+      { n_layers = n_ls;
+        n_inputs = n_ins;
+        n_outputs = n_outs;
+        max_layer_size = max_l_size;
+        layer_sizes;
+        min_input_values;
+        max_input_values;
+        mean_values;
+        range_values; }
+  with Failure msg ->
+    Error (Format.sprintf "Unexpected error: %s." msg)
 
 (* Generic model. *)
 
-- 
GitLab