Каждая команда возвращает два результата: код и строку. Код служит для индикации того, успешно или нет закончилась команда, а строка предоставляет дополнительную информацию. Действующие значения кодов определены в файле tcl.h, в виде следующего списка:
TCL_OK
Этот код нормального завершения, возвращается при успешном выполнении команды. Строка содержит возвращаемое командой значение.
TCL_ERROR
Указывает на имевшую место ошибку; строка содержит сообщение, описывающее ошибку. Дополнительно к этому, глобальная переменная
errorInfo будет содержать словесную информацию о командах и процедурах, выполнявшихся при возникновении ошибки; глобальная переменная
errorCode будет содержать машинно-читаемые данные об ошибке, если таковые доступны.
TCL_RETURN
Указывает на то, что была вызвана команда
return, и что текущая процедура (или команда верхнего уровня, или команда source) должна немедленно завершиться. Строка содержит возвращаемое значение для процедуры или команды.
TCL_BREAK
Указывает на то, что была вызвана команда
break, и поэтому самый внутренний цикл должен немедленно прекратиться. Строка должна всегда оставаться пустой.
TCL_CONTINUE
Указывает на то, что была вызвана команда
continue, и поэтому самый внутренний цикл должен приступить к следующей итерации. Строка должна всегда оставаться пустой.
Обычно программистам на Tcl не нужно задумываться о кодах возврата, поскольку почти всегда возвращается
TCL_OK. Если команда возвратила что-либо иное, то интерпретатор Tcl немедленно останавливает обработку команд и возвращается к вызвавшему его событию. Если в некоторый момент имеется несколько вложенных вызовов интерпретатора Tcl, то обычно каждая из вложенных команд вернет ошибку вызывающему ее субъекту, и таким образом сообщение об ошибке достигнет самого верхнего уровня в приложении. После этого приложение выведет пользователю сообщение об ошибке.
В некоторых случаях отдельные команды обрабатывают ошибочные ситуации сами и не сообщают о них наверх. Например, команда
for проверяет наличие кода возврата
TCL_BREAK и если находит его, то прекращает выполнение тела цикла и возвращает код
TCL_OK вызвавшему субъекту. Также команда
for обрабатывает коды
TCL_CONTINUE, a Интерпретатор процедур обрабатывает коды
TCL_RETURN. Команда
catch позволяет программам Tcl перехватывать ошибки и обрабатывать их без последующего прекращения интерпретации команд.