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

Материал из GB wiki
Перейти к: навигация, поиск
Строка 3: Строка 3:
 
|Название=TRY...FINALLY...EXCEPT
 
|Название=TRY...FINALLY...EXCEPT
 
|Описание=Функции для работы с ошибками.
 
|Описание=Функции для работы с ошибками.
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'')
+
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'') )
 
<br/>или
 
<br/>или
<br/>'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...''))
+
<br/>'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'') )
 +
<br/>или
 +
<br/>'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'', '''RAISE'''() ) )
 
|Аргументы=
 
|Аргументы=
 
{{Аргумент
 
{{Аргумент
Строка 12: Строка 14:
 
}}<br/>{{Аргумент
 
}}<br/>{{Аргумент
 
  |Название=блок FINALLY
 
  |Название=блок FINALLY
  |Пояснение=в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникли или нет ошибки при выполнении блока TRY
+
  |Пояснение=в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникла или нет ошибка при выполнении блока TRY
}}
+
}}<br/>{{Аргумент
<br/>{{Аргумент
 
 
  |Название=блок EXCEPT
 
  |Название=блок EXCEPT
 
  |Пояснение=в блоке EXCEPT находятся выражения, которые будут выполнены только если в блоке TRY возникнет ошибка
 
  |Пояснение=в блоке EXCEPT находятся выражения, которые будут выполнены только если в блоке TRY возникнет ошибка
 
}}|Пример=Пример 1.
 
}}|Пример=Пример 1.
  '''TRY'''(<выражение, выражение, ...>, ''<--блок кода, защищаемый от ошибок'',
+
:SDt:=`aaa`,
 +
  '''TRY'''(STRTODATE(:SDt),
 
     '''EXCEPT'''(
 
     '''EXCEPT'''(
         <выражение, выражение, ...,> ''<--эти выражения выполнятся только в том случае, если в блоке TRY возникла ошибка''
+
         INFO(`Ошибка преобразования даты`)
 
     )
 
     )
  )
+
  ),
 +
INFO(`Продолжаем выполнение...`)
 +
 
 +
Будут выведены следующие сообщения:
 +
* "Ошибка преобразования даты"
 +
* "Продолжаем выполнение..."
  
В блоке TRY находятся выражения, контролируемые на ошибки.
 
<br>Если в одном из этих выражений возникнет ошибка, выполнение блока TRY прервётся, а управление будет передано на блок EXCEPT, после чего выполнятся выражения уже этого блока.
 
<br>При этом работа всего скрипта не будет прервана и продолжится после конструкции TRY...EXCEPT.
 
  
 
<br>
 
<br>
 
Пример 2.
 
Пример 2.
  '''TRY'''(<выражение, выражение, ...>, ''<--блок кода, защищаемый от ошибок'',
+
  :SDt:=`aaa`,
     '''FINALLY'''(
+
TRY(STRTODATE(:SDt),
        <выражение, выражение, ...> ''<--эти выражения выполнятся всегда, независимо от ошибок в блоке TRY''
+
  EXCEPT(
    )
+
    INFO(`Ошибка преобразования даты`),
)
+
     RAISE()
 +
  )
 +
),
 +
INFO(`Продолжаем выполнение...`)
 +
 
 +
Будут выведены следующие сообщения:
 +
* "Ошибка преобразования даты"
 +
* "'aaa' is not a valid date and time"
 +
и выполнение скрипта будет прервано.
  
В блоке TRY находятся выражения, контролируемые на ошибки.
 
<br>Если в одном из этих выражений возникнет ошибка, выполнение блока TRY прервётся, а управление будет передано на блок EXCEPT, после чего выполнятся выражения уже этого блока.
 
<br>При этом работа всего скрипта не будет прервана и продолжится после конструкции TRY...EXCEPT.
 
В случае возникновения ошибки во время выполнения выражений в блоке TRY управление будет передано на блок EXCEPT, после чего выполнятся выражения этого блока. При этом работа всего скрипта не будет прервана и продолжится после TRY...EXCEPT.
 
  
 +
<br>
 
Пример 3.
 
Пример 3.
  '''TRY'''(<выражение, выражение, ...>, ''<--блок кода, защищаемый от ошибок'',
+
  :SDt:=`aaa`,
     '''EXCEPT'''(
+
TRY(STRTODATE(:SDt),
        <выражение, выражение, ...>, ''<--эти выражения выполнятся только в том случае, если в блоке TRY возникла ошибка''
+
  FINALLY(
        RAISE()
+
     IIF(
 +
      STRLEN(:SDt)<>10,
 +
      INFO(`Некорректная строка с датой`)
 
     )
 
     )
)
+
  )
<br/>    )
+
  ),
<br/> ),
+
  INFO(`Продолжаем выполнение...`)
<br/> EXCEPT(
+
 
<br/>    Info(`Ругаемся на ашипку!`),
+
Будут выведены следующие сообщения:
<br/>    RAISE()
+
* "Некорректная строка с датой"
<br/>  )
+
* "'aaa' is not a valid date and time"
<br/> ),
 
<br/> Info(`Опаньки, продолжаем выполнение!`)
 
  
 
}}
 
}}

Версия 12:51, 13 марта 2015

Функции для работы с ошибками.

Синтаксис

TRY(выражение, выражение, ..., FINALLY(выражение, выражение, ...) )
или
TRY(выражение, выражение, ..., EXCEPT(выражение, выражение, ...) )
или
TRY(выражение, выражение, ..., EXCEPT(выражение, выражение, ..., RAISE() ) )

Аргументы

блок TRY
в блоке TRY находятся выражения, которые нужно проконтролировать на ошибки
блок FINALLY
в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникла или нет ошибка при выполнении блока TRY
блок EXCEPT
в блоке EXCEPT находятся выражения, которые будут выполнены только если в блоке TRY возникнет ошибка

Тип результата

Нет

Примеры

Пример 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"