TRY FINALLY EXCEPT — различия между версиями
Материал из GB wiki
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) |
||
| Строка 21: | Строка 21: | ||
|Название=RAISE() | |Название=RAISE() | ||
|Пояснение=функция RAISE(), помещённая в блок EXCEPT, возобновляет исключение, проталкивая его во внешний обработчик или, если такового нет - в стандартный обработчик исключений | |Пояснение=функция RAISE(), помещённая в блок EXCEPT, возобновляет исключение, проталкивая его во внешний обработчик или, если такового нет - в стандартный обработчик исключений | ||
| − | <br/>{{Аргумент | + | }}<br/>{{Аргумент |
| − | |Название= | + | |Название=Объект E |
|Пояснение=E - объект для работы с ошибками. Например: E.ClassName(), E.Message() | |Пояснение=E - объект для работы с ошибками. Например: E.ClassName(), E.Message() | ||
| − | }}|Пример=Пример 1. | + | }} |
| + | |Пример=Пример 1. | ||
:SDt:=`aaa`, | :SDt:=`aaa`, | ||
'''TRY'''(STRTODATE(:SDt), | '''TRY'''(STRTODATE(:SDt), | ||
Версия 08:35, 17 марта 2015
Функции для работы с ошибками.
Синтаксис
TRY(выражение, выражение, ..., FINALLY(выражение, выражение, ...) )
или
TRY(выражение, выражение, ..., EXCEPT(выражение, выражение, ...) )
или
TRY(выражение, выражение, ..., EXCEPT(выражение, выражение, ..., RAISE() ) )
Аргументы
- блок TRY
- в блоке TRY находятся выражения, выполнение которых нужно проконтролировать
- блок FINALLY
- в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникло или нет исключение при выполнении блока TRY
- блок EXCEPT
- в блоке EXCEPT находятся выражения, которые будут выполнены только в том случае, если в блоке TRY возникнет исключение. При этом исключение считается обработанным и выполнение скрипта не прерывается стандартным сообщением об ошибке
- RAISE()
- функция RAISE(), помещённая в блок EXCEPT, возобновляет исключение, проталкивая его во внешний обработчик или, если такового нет - в стандартный обработчик исключений
- Объект E
- E - объект для работы с ошибками. Например: E.ClassName(), E.Message()
Тип результата
- Нет
Примеры
Пример 1.
:SDt:=`aaa`,
TRY(STRTODATE(:SDt),
EXCEPT(
INFO(`Ошибка преобразования даты`)
)
),
INFO(`Продолжаем выполнение...`)
Будут выведены следующие сообщения:
- "Ошибка преобразования даты"
- "Продолжаем выполнение..."
и выполнение скрипта будет продолжено.
Пример 2.
:SDt:=`aaa`,
TRY(STRTODATE(:SDt),
EXCEPT(
INFO(`Ошибка преобразования даты`),
RAISE()
)
),
INFO(`Продолжаем выполнение...`)
Будут выведены следующие сообщения:
- "Ошибка преобразования даты"
- "'aaa' is not a valid date and time"
и выполнение скрипта будет прервано.
Пример 3.
:SDt:=`aaa`,
TRY(STRTODATE(:SDt),
FINALLY(
IIF(
STRLEN(:SDt)<>10,
INFO(`Некорректная строка с датой`)
)
)
),
INFO(`Продолжаем выполнение...`)
Будут выведены следующие сообщения:
- "Некорректная строка с датой"
- "'aaa' is not a valid date and time"
и выполнение скрипта будет прервано.
Пример 4.
Можно использовать объект E для работы с ошибками:
:SDt:=`aaa`,
TRY(
STRTODATE(:SDt),
EXCEPT(
INFO(
`Произошла какая-то ошибка... Определим её тип.`
+ \
+ `Класс ошибки: `
+ E.ClassName()
+ \
+ `Текст ошибки: `
+ E.Message()
)
)
),
INFO(`Продолжаем выполнение...`)
Будут выведены следующие сообщения:
- Произошла какая-то ошибка... Определим её тип.
- Класс ошибки: EConvertError
- Текст ошибки: 'aaa' is not a valid date and time
- в выражении
- STRTODATE(:SDt)
- Продолжаем выполнение...