суббота, 4 декабря 2021 г.

Tcl/Tk 8.6.9 команда try

 

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"
}
Copyright © 2008 Donal K. Fellows

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога