Tcl8.6.9/Tk8.6.9 Documentation > Tcl Commands, version 8.6.9 > try
НАИМЕНОВАНИЕ
try — Поймать и обработать ошибки и исключения
ОБЗОР
try body ?handler...? ?finally script?ОПИСАНИЕ
Эта команда выполняет сценарий body и, в зависимости от результата этого сценария (нормальный выход, ошибка или какой-либо другой исключительный результат), запускает сценарий обработчика для обработки случая. Как только это все произойдет, если присутствует предложение finally , включаемый в него script будет запущен, и результат обработчика (или body если ни один обработчик не найден) может продолжить распространение. Обратите внимание, что предложение finally обрабатывается, даже если возникает ошибка, и независимо от того, какой из них используется, если таковой имеется, handler.Каждое предложение handler выражается в виде нескольких слов и должно иметь одну из следующих форм:
- on code variableList script
- Это предложение будет выбираться, если выполнение body завершилось с кодом исключения code. code может быть выражен как целое число или одно из следующих буквальных слов: ok, error , return, break или continue. Эти литералы соответствуют целым числам от 0 до 4 соответственно.
- trap pattern variableList script
- Это предложение соответствует, если оценка body привела к ошибке и префикс -errorcode из словаря статуса интерпретатора равен pattern. Количество префиксных слов, взятых из -errorcode, равно длине списка pattern, а межсловные пробелы нормализованы как в -errorcode и pattern перед сравнением.
Слово variableList в каждом handler всегда интерпретируется как список имен переменных. Если первое слово списка присутствует и не является пустым, оно именует переменную, в которую будет помещен результат оценки body (из основной try); это будет содержать информацию обо всех ошибках в удобочитаемой форме. Если второе слово списка присутствует и непусто, оно именует переменную, в которую будет помещен словарь опций интерпретатора на момент завершения выполнения body.
Слово script каждого обработчика также всегда интерпретируется одинаково: как сценарий Tcl для оценки соответствия предложения. Если script представляет собой литерал «-», а обработчик не последний, script следующего обработчика вызывается вместо этого (как и с командой switch).
Обратите внимание, что предложения handler сопоставляются по порядку, и что всегда выбирается первое совпадающее. Будет выбрано не более одного предложения handler . Как следствие, on error будет маскироваться любая последующая trap в try. Также обратите внимание, что on error эквивалентно trap {} .
Если исключение (то есть любой результат, отличный от ok ) возникает во время выполнения либо предложения handler, либо предложения finally, словарь состояния исходного исключения будет добавлен в словарь статусов нового исключения под ключом -during.
ПРИМЕРЫ
Убедитесь, что файл закрыт, несмотря ни на что:
set f [open /some/file/name a] try { puts $f "some message" # ... } finally { close $f }
Обработка различных причин, по которым файл нельзя открыть для чтения:
try { set f [open /some/file/name w] } trap {POSIX EISDIR} {} { puts "failed to open /some/file/name: it's a directory" } trap {POSIX ENOENT} {} { puts "failed to open /some/file/name: it doesn't exist" }
Комментариев нет:
Отправить комментарий