Как поймать ошибку на экране в переменную в TCL с помощью catch

Чтобы найти ошибку на экране, поймайте, например

   puts $c
   #error on terminal : can't read "c": no such variable

   catch {puts $c} err
   puts $err # value of err 1

Есть ли способ поймать фактическое сообщение об ошибке в TCL, кроме сигнала в переменной err.


person made_in_india    schedule 22.03.2013    source источник


Ответы (1)


да. Прочитайте глобальные переменные ::errorInfo или ::errorCode, чтобы получить трассировку стека и машинно-разборный список из трех элементов «Ошибка POSIX» соответственно.

Начиная с Tcl 8.5, также можно передать имя словаря в catch после имени переменной для получения результата, и этот словарь будет заполнен большей частью того, что можно получить с помощью «классических» переменных ошибок, которые я описал выше, и больше.

Все это объясняется на на catch странице руководства.

person kostix    schedule 22.03.2013
comment
В tcl 8.6 появилась даже команда try, которая может тоже быть полезным. Использование try проще, чем кажется (обычный try {...} on error msg {puts $msg}). Также обратите внимание, что Tcl строит, в отличие от Java или .Net, стек ошибок при раскручивании. - person Johannes Kuhn; 23.03.2013