TRY FINALLY EXCEPT — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
{{Функция ГБ
 
{{Функция ГБ
 
|Название=TRY...FINALLY...EXCEPT
 
|Название=TRY...FINALLY...EXCEPT
|Описание=Функции для работы с ошибками (доступны с ыерсии 1.9.0.9).
+
|Описание=Функции для работы с ошибками (доступны с версии 1.9.0.9).
 
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'') )
 
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'') )
 
<br/>или
 
<br/>или

Версия 10:28, 4 июня 2015

Функции для работы с ошибками (доступны с версии 1.9.0.9).

Синтаксис

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)
  • Продолжаем выполнение...