You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法打印bmp::open抛出的错误信息求助

问题分析与解决

你的代码编译失败的核心原因是Rust的match表达式要求所有分支返回相同类型:

  • Ok(i)分支返回的是bmp::Image类型
  • Err(error)分支仅执行了println!,默认返回空元组(),和Ok分支类型不匹配,导致编译报错

以下是几种可行的修复方案:

方案1:遇到错误直接终止程序(适合简单脚本)

如果程序加载图片失败就无法继续运行,可以打印错误后退出进程:

let image = match bmp::open(argument) {
    Ok(i) => i,
    Err(error) => {
        eprintln!("Error! {error:?}"); // 用eprintln输出到标准错误流,比println更规范
        std::process::exit(1); // 非0退出码表示程序异常终止
    },
};

方案2:将错误返回给调用者处理(适合库函数或需要优雅处理错误的场景)

如果希望上层逻辑决定错误处理方式,可以让函数返回Result类型:

use bmp::{Image, Error};

fn load_image(path: &str) -> Result<Image, Error> {
    match bmp::open(path) {
        Ok(img) => Ok(img),
        Err(err) => {
            eprintln!("加载图片失败: {err:?}");
            Err(err) // 将错误传递出去
        }
    }
}

方案3:用unwrap_or_else简化写法

和方案1逻辑一致,但代码更简洁:

use std::process;

let image = bmp::open(argument).unwrap_or_else(|error| {
    eprintln!("Error! {error:?}");
    process::exit(1);
});

内容的提问来源于stack exchange,提问作者sevonchan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:06