error handling - manejo de errores smalltalk
error-handling (3)
Solo quiero señalar que junto al camino @Frank Shearar menciona que hay otra posibilidad. Quiero decir por diseño. En algún momento es más útil dejar que la persona que llama ahora qué problema está pasando.
El #on:do:
es perfectamente aceptable, pero la mayoría de las veces no sabes qué poner como primer argumento. block on: ?? do: something
block on: ?? do: something
.
Déjame un ejemplo. En realidad, hay un ejemplo de la biblioteca de Colección. Especialmente con respecto al diccionario.
aDict at: 4
Aquí lo que sucede si 4
no está en el diccionario. Acaba de obtener un error simple que necesita capturar en un #on:do:
Pero hay una mejor manera de manejar esta situación:
aDict at: 4 ifAbsent: [^#noSuchThingAs4]
Usted maneja el error igual que el #on:do:
pero ahora sabe por qué. Entonces podrías hacer eso en otro para manejar tu error correctamente.
aConnection connectIfFailed: [ ^#maybeRetryHere ]
Tenga en cuenta que debe colocar el código de excepción en un bloque para que no se evalúe hasta que ocurra el error.
aDict at: 4 ifAbsentPut: self default
puede funcionar, pero está mal. Espero que te ayuden
He leído algunas introducciones de principiante a smalltalk y hay un tema que falta. Es manejo de errores. ¿Cómo se hace? ¿Los objetos arrojan algún tipo de excepciones? ¿Enviar algunos mensajes de error a alguien?
Para presentar una excepción:
MyException signal.
MyException signal: ''With an error message''.
Para manejar una excepción:
[ 1 / 0 ] on: ZeroDivide do: [ Transcript showln: ''Oops! Zero divide!''].
Para manejar una excepción y usar parte de la información de la excepción:
[ 1 / 0 ] on: Error do:
[:e | Transcript showln: ''Oops! '' , e className , ''!''].
Para asegurarse de que siempre suceda algo (a la try finally
):
[ 1 / 0 ] ensure: [ Transcript showln: ''This will always run'' ]
Lea el capítulo de Pharo Por el ejemplo 2: https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf