Spec-Zone.ru › Tcl/Tk

try

Имя

try — Перехват и обработка ошибок и исключений

Синопсис

try тело ?обработчик...? ?finally скрипт?

Описание

Эта команда выполняет скрипт тело и, в зависимости от результата этого скрипта (нормальный выход, ошибка или какое-либо другое исключительное событие), запускает скрипт обработчика для обработки случая. После этого, если присутствует блок finally, будет выполнен скрипт скрипт, и результат обработчика (или тела, если не нашлось совпадающего обработчика) будет разрешен к дальнейшему распространению. Обратите внимание, что блок finally обрабатывается даже если произошла ошибка и независимо от того, какой (если есть) обработчик используется.

Блоки обработчик выражаются несколькими словами и должны иметь один из следующих форматов:

on код переменныеСписок скрипт
Этот блок совпадает, если выполнение тела завершилось с кодом исключения код. Код может быть выражен как целое число или одним из следующих литеральных слов: ok, ошибка, возврат, прервать или продолжить. Эти литералы соответствуют целым числам от 0 до 4 соответственно.
trap шаблон переменныеСписок скрипт
Этот блок совпадает, если выполнение тела привело к ошибке, и префикс -errorcode из словаря состояния интерпретатора равен шаблону. Количество префиксных слов, взятых из -errorcode, равно длине списка шаблон, а пробелы между словами в -errorcode и шаблоне нормализуются перед сравнением.

Слово переменныеСписок в каждом обработчике всегда интерпретируется как список имён переменных. Если первое слово списка присутствует и не пустое, оно назначает переменную, в которую будет помещён результат выполнения тела (из основного try); в неё будет помещён удобочитаемый вид любых ошибок. Если второе слово списка присутствует и не пустое, оно назначает переменную, в которую будет помещён словарь опций интерпретатора на момент завершения выполнения тела.

Слово скрипт каждого обработчика также всегда интерпретируется одинаково: как скрипт Tcl для проверки соответствия блока. Если скрипт является литералом «-» и обработчик не последний, то вместо него вызывается скрипт следующего обработчика (точно так же, как и с командой switch).

Обратите внимание, что блоки обработчик проверяются в порядке следования, и всегда выбирается первый соответствующий блок. Максимально один блок обработчик будет выбран. Вследствие этого, on error будет маскировать любые последующие trap в try. Также обратите внимание, что on error эквивалентно trap {}.

Если во время выполнения либо обработчика, либо блока finally произойдёт исключение (т.е. любой результат, не равный ok), словарь состояния исходного исключения будет добавлен в словарь состояния нового исключения под ключом -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"
}

См. также

catch, ошибка, возврат, throw

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/try.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/try.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API