Skip to content

G.ERR.01 应正确处理返回类型 OptionResult

【级别】 建议

【描述】

对于返回类型为 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;
    } 
  };

  // ...
}