2012-03-30 12 views

Respuesta

5

El comando central para atrapar cualquier tipo de error lanzado por Tcl es catch. Se necesita al menos un argumento, un script para evaluar y devuelve el código de resultado de la evaluación de ese script. El código de resultado es 1 cuando ocurre un error, 0 cuando no hubo ningún error, y un montón de otras cosas en otros casos (que indican otros tipos de excepción que generalmente no son errores). El catch también toma un argumento opcional que nombra una variable en la cual escribir el resultado de evaluar el script o el mensaje de error. La variable global errorInfo contendrá el seguimiento de pila en el caso de un error (o de 8.5 en adelante puede obtener el diccionario de estado del intérprete con otro nombre de variable pasado a catch).

Para atrapar un error en una secuencia de comandos “foo.tcl”, se utiliza un código como éste:

if {[catch {source foo.tcl} msg]} { 
    puts "I got an error: $msg" 
    puts "The stack trace was this:\n$errorInfo" 
} 

Es hasta usted para encontrar la manera de escribir que en un archivo si lo desea. (Utilizo esta técnica con un script externo que implementa una trampa de error cuidadosamente probada y que carga un script interno que hace el trabajo real. Creo que funciona bien o puede llamar a procedimientos en ese script "atrapado". Depende de usted realmente ; Tcl debe hacer todos errores capturable, y hay muy pocas condiciones que se deslizan a través)


La otra ruta que los errores pueden ser reportados es a través de bgerror, que se llama para controlar los errores que se producen durante el evento. tratamiento. Es un procedimiento que puede escribir su propia versión de; le será dada un solo argumento cuando se llama que es el mensaje de error, y tendrá el mundial errorInfo ajustado correctamente cuando se le llama:

proc bgerror {msg} { 
    global errorInfo 
    puts "I got an error in an event: $msg" 
    puts "The stack trace was this:\n$errorInfo" 
} 

Si no hay aplicación de bgerror definido, el seguimiento de la pila se acaba de escribir a la stderr canal. Si está utilizando el paquete Tk, se proporciona una implementación de bgerror que muestra un cuadro de diálogo que describe el problema.

1

Pruebe los comandos bgerror o interp bgerror.

Lea la documentación de bgerror, tiene un ejemplo simple.

+0

Buena sugerencia. Pero no funciona. :(Todavía me aparece 'Tcl Interpreter Error: no se puede leer" on1 ": no existe tal tipo de variable en el terminal, pero no en la función. – ilya1725