Мне нужно автоматизировать огромную интерактивную программу Tcl, используя Tcl expect.
Как я понял, эта территория действительно опасна, так как мне нужно расширить уже существующий массив кода, но я не могу полагаться на ошибки, которые действительно приводят к сбою программы с положительным кодом выхода, как я мог бы в обычном скрипте. Это означает, что я должен думать обо всех возможных вещах, которые могут пойти не так, и «ожидать» этого.
В настоящее время я использую процедуру «die» вместо того, чтобы вызывать ошибку в моем собственном коде, которая автоматически завершается. Но такого рода состояние ошибки не может быть catch
ed, и затрудняет обнаружение ошибок, особенно в коде, написанном не мной, поскольку в конечном итоге большинство библиотечных подпрограмм будут основаны на error
.
Поскольку у меня есть доступ к оболочке Tcl программы, можно ли включить функцию отказа при ошибке?
РЕДАКТИРОВАТЬ:
Я использую Tcl 8.3, что является серьезным ограничением с точки зрения доступных инструментов.
Примеры ошибок, при которых я хотел бы автоматически выйти:
% puts $a(2)
can't read "a(2)": no such element in array
while evaluating {puts $a(2)}
%
% blublabla
invalid command name "blublabla"
while evaluating blublabla
%
Как и любая другая ошибка, из-за которой нормальный скрипт завершается. Они могут подниматься с 10 уровней внутри вызовов процедур.
Я также пробовал переопределить глобальную команду error
, но не все ошибки, которые могут возникнуть в Tcl, используют ее. Например, указанная выше ошибка «команда не найдена» не прошла через мою пользовательскую error
процедуру.
error
событий вы хотите выйти? - person mrcalvin   schedule 23.10.2019