# 尝试

**执行可能出错的块,异常时交给 `捕捉`。**

```xuantie
尝试 {
    示("正在执行危险操作...")
} 捕捉 (错误) {
    示("捕获到异常")
}
```

## 你可以……

- **把一整段危险操作包起来,出错统一善后**——善后逻辑集中写在 `捕捉` 一处:

```xuantie
尝试 {
    设 x = 10 / 0
    示("结果: " & 字(x))
} 捕捉 (错误) {
    示("捕获到错误,改用默认配置")
}
```

> `文件.读` 返回 `结果` 容器而非裸字符串,它**不触发** `捕捉`——请用 `若 r.成功 { 设 内容 = r.值 }` 处理。

- **不要错误详情就省略变量**——只写 `捕捉` 加块:

```xuantie
尝试 {
    危险操作()
} 捕捉 {
    示("已兜底")
}
```

## 注意

- 可捕捉的运行时故障:**除零**、**注解参数类型错误**——在 `尝试` 块内抛出,块外保持旧行为(除零返 `0`)。可预期的失败请用 `结果` 类型加 `?` 判断,那才是错误处理主路。
- **不可捕捉**(会直接以非零码退出进程,`捕捉` 兜不住):访问违例、堆损坏、`解(非字符串)` 之类的运行时类型错误(这类错误按「宁可报错退出」原则打印诊断后退出)。
- 数组越界返 `空`、字典缺键返 `空` 不触发 `捕捉`——这是约定行为。
- 多线程/`异步`/`并行` 块内不要用 `尝试`(处理器为进程级,跨线程不可靠)。
- `捕捉` 子句不能省略:`尝试` 块后面必须紧跟 `捕捉`,否则编译报错。

## 相关

[捕捉](捕捉.md) · [终](终.md)