Обработка ошибок

Конструкция try catch

По умолчанию, если в момент выполнения скрипта была получена ошибка, то скрипт сразу заканчивает свою работу. Если вы хотите избежать прекращения работы скрипта, то вы должны использовать конструкцию try. Если во время выполнения кода внутри блока try произошла ошибка, то управление перейдет в конструкцию catch, которая должна быть после try. После ключевого слова catch необходимо указать имя переменной типа error, которая будет содержать информацию об ошибке. Вы можете использовать специальные функции для получения идентификатора и текста ошибки. Если вы не удалите ошибку внутри catch с помощью recover или retry, то она будет передана дальше и скрипт закончит свою работу.

TryStmt ="try" Block CatchStmt
CatchStmt = "catch" identifier Block
run {
try {
myfunc()
error(101, "Custom error")
}
catch err {
if ErrID(err) != 101: error( 102,
"Error \{ErrText(err)} has occurred in myfunc()")
}
}

Конструкция recover

Конструкция recover используется внутри блока catch для удаления ошибки. По этой команде информация об ошибке удаляется, скрипт выходит из текущего блока catch и продолжает выполнение дальше.

RecoverStmt = "recover"
run str {
try : 10/0
catch err : recover
return "ok"
}
// ok

Конструкция retry

Конструкция retry используется внутри блока catch для повторного запуска try. По этой команде информация об ошибке удаляется и скрипт заново выполняет соответствующий блок try.

RetryStmt = "retry"
run {
str fname
try {
fname = ReadString("Specify filename: ")
Println("Beginning of the file: ", str(ReadFile(fname, 0, 50)))
} catch err {
Println("ERROR #\{ErrID(err)}: \{ErrText(err)}")
retry
}
}