> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/syntax/error-handling.md).

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

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

По умолчанию, если в момент выполнения скрипта была получена ошибка, то скрипт сразу заканчивает свою работу. Если вы хотите избежать прекращения работы скрипта, то вы должны использовать конструкцию **try**. Если во время выполнения кода внутри блока *try* произошла ошибка, то управление перейдет в конструкцию **catch**, которая должна быть после **try**. После ключевого слова *catch* необходимо указать имя переменной типа *error*, которая будет содержать информацию об ошибке. Вы можете использовать [специальные функции](https://gentee.github.io/docs-gentee-ru/stdlib/runtime#erriderror-err-int) для получения идентификатора и текста ошибки. Если вы не удалите ошибку внутри *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
    }
}
```
