Buen estado a excepción de excepciones -- unit-testing campo con exception campo con ocaml camp Relacionados El problema

Nice output for exception of exceptions


0
vote

problema

Español

En OCAML, es posible dejar que una excepción tenga otra excepción:

  exception Example of exn   

Pero cuando esta excepción se eleva desde otro módulo, la salida se ve algo así:

  Module.Example(_)   

¿Alguna solución a esto? Lo que quiero es, por supuesto,

  Module.Example(Not_found)   

o similar.

Tengo este problema en Ounit, por lo que no es posible para mí resolverlo con un <ion-list> <ion-item> <ion-label>Pokémon Yellow</ion-label> </ion-item> <ion-item> <ion-label>Mega Man X</ion-label> </ion-item> </ion-list> 4 .

Original en ingles

In OCaml it's possible to let an exception carry another exception:

exception Example of exn 

But when this exception is raised from another module, the output looks something like this:

Module.Example(_) 

Any solution to this? What I want is of course

Module.Example(Not_found) 

or similar.

I have this problem in OUnit, so it's not possible for me to solve it with a well-placed try ... with.

        

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

La solución recomendada es no llevar excepciones alrededor de los valores a menos que sea la necesidad de volver a reconrarlos más tarde.

Hay una forma de imprimir los detalles de las excepciones que le importan al registrar su propia impresora de excepciones. Esto se hace de la siguiente manera:

  isEnabled()8  

compilar y ejecutar:

  isEnabled()9  
 

The recommended solution is to not carry exceptions around as values unless there is a need to re-raise them later.

There is however a way to print the details of exceptions that matter to you by registering your own exception printer. This is done as follows:

(* File exn.ml *)  exception Example of exn  let () =   Printexc.register_printer (function     | Example e ->         Some ("Example(" ^ Printexc.to_string e ^ ")")     | _ ->         None   )  let () =   try raise (Example (Example Not_found))   with e ->     Printf.eprintf "Uh oh: %s\n%!" (Printexc.to_string e) 

Compile and run:

$ ocamlopt -o exn exn.ml $ ./exn  Uh oh: Example(Example(Not_found)) 
 
 
 
 
0
 
vote

No estoy familiarizado con los detalles, pero sospecho que el nombre se imprimiría si se podía recuperar de manera confiable. Se imprime a partir del Toplevel en mis experimentos, pero no del código compilado.

Una cosa posible sería usar WebElement el = driver.findElement(By.xpath("//button")); if(el.isDisplayed() && el.isEnabled()) { el.click(); } 0 Para convertir la excepción a una cadena y tener WebElement el = driver.findElement(By.xpath("//button")); if(el.isDisplayed() && el.isEnabled()) { el.click(); } 1 Lleve una cadena en su lugar. O podría haber, por ejemplo, llevar la excepción y la cadena.

 

I am not familiar with the details, but I suspect the name would be printed if it could be retrieved reliably. It is printed from the toplevel in my experiments, but not from compiled code.

One possible thing would be to use Printexc.to_string to convert the exception to a string and have Example carry a string instead. Or you could have Example carry both the exception and the string.

 
 

Relacionados problema

4  "El archivo CMA no es un archivo de objeto BYTECODE" => ¿Qué significa eso?  ( The cma file is not a bytecode object file what does that mean ) 
Estoy tratando de instalar las enlaces OCAML-SQLITE3, para acceder a una base de datos SQLite desde un programa O'CAML. El Configurar y hacer ir sin problem...

6  Cadena Ocaml a 4 flotadores  ( Ocaml string to 4 floats ) 
Estoy tratando de obtener los flotadores de una cadena. Me refiero a leer línea por línea desde un archivo de texto y obtener los flotadores de una línea. Enc...

-4  ¿Cómo sabes qué expresión Ocaml espera? (la coincidencia de patrones)  ( How do you know what expression ocaml expects pattern matching ) 
Estoy haciendo una coincidencia de patrones y sigo recibiendo un error que dice que la expresión se esperaba en la lista 'una lista. ¿Por qué es eso? ...

0  #use "str.cma" y #use "name.mli" en Eclipse  ( Use str cma and use name mli in eclipse ) 
¿Cómo uso "Str.CMA" en Eclipse? Además, ¿cómo voy a Link Name.ml a Name.mli? Normalmente lo haría #USE "NAME.MLI" en "Name.ml" cuando se usa Emacs. ...

0  Expresión de diferentes tipos esperados  ( Expression of different type expected ) 
Tengo el siguiente código: void startPlugin() { MyClass::instance = new MyClass(); MyClass::instance->process(); } 111 Estoy recibiendo este error: ...

1  ¿Es esta una implementación razonable de la función cuadrática Bézier en OCAML?  ( Is this a reasonable implementation of the quadratic b%c3%a9zier function in ocaml ) 
Un amigo se encontró con una función de curva cuadrática Bézier en su base de código que usó un nido de ratas gigantescas de una tabla de interruptores para r...

1  Servidor web multiprocesado con Ocaml  ( Multiprocess web server with ocaml ) 
Quiero hacer que WebServer con Ocaml. Tendrá una interfaz de descanso y no tendrá dependencias (solo en la búsqueda de datos constantes cargados a RAM en el i...

-1  OCAML - Prefijo todas las cuerdas en un conjunto  ( Ocaml prefix all strings in a set ) 
Estoy usando el módulo establecido en Ocaml para crear conjuntos de cadenas. estoy luchando sobre cómo prefijar una cadena dada a todos los elementos del co...

30  ¿Cómo obtengo un rastro de pila en Ocaml?  ( How do i get a stack trace in ocaml ) 
El idioma de la cámara objetivo solo producirá trazas de pila. Si le solicita bien, ¿cuáles son los requisitos para el código de byteCode y el código nativo? ...

1  Binding Z3 Ocaml no funciona (Windows 7)  ( Z3 ocaml binding not working windows 7 ) 
No estoy obteniendo la vinculación de Z3 Ocaml trabajando en Windows 7. Aquí está el proceso que seguí. OBJETIVO INSTALADO CAML VERSIÓN 3.11.0 (Microsoft T...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos