G.ERR.01 应正确处理返回类型 Option 和 Result
【级别】 建议
【描述】
对于返回类型为 Option 或 Result 的函数,应使用不会导致 panic 的方法显示处理返回的 None / Err 错误值。
处理方法包括:
- 使用 match 语句
- 使用 unwrap_or / unwrap_or_else / unwrap_or_default 等函数 例外:如下两种场景可直接调用 unwrap / expect :
- 调用返回 Option / Result 函数之前通过输入参数的提前校验,可以保证返回值一定不会是 None / Err 。
- 业务模块的设计要求对于返回 None / Err 的情况 panic,依赖更高层的可靠性机制检测故障并实现故障恢复。
【正例】
Rust
// ...
pub fn main() {
// 符合,针对不同情况做出应对措施,有利于定位错误
let config_content = match fs::read_to_string(CONFIG_PATH) {
Ok(content) => content,
Err(e) => {
use std::io::ErrorKind; match e.kind() {
ErrorKind::NotFound => {
// 处理文件找不到的情况
}
ErrorKind::PermissionDenied => {
// 处理文件权限不够的情况
}
_ => {
// 处理其它错误情况
}
}
return;
}
};
// ...
}