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

如何在Rust的main函数中返回多行错误信息并正确换行显示?

解决Rust main返回多行错误时换行不生效的问题

当你让main函数返回Result<(), String>时,Rust默认会用Debug格式打印错误信息,这就导致字符串里的\n会被当作普通字符显示,而不是解析成换行符。要解决这个问题,有两种常用方法:

方法一:手动处理错误输出

放弃让main直接返回Result,转而在main内部调用业务逻辑函数,捕获错误后用Display格式手动打印:

fn main() {
    if let Err(e) = run() {
        // 使用eprintln!的Display格式输出,\n会被正确解析为换行
        eprintln!("{}", e);
        // 手动退出并返回错误码
        std::process::exit(1);
    }
}

// 把业务逻辑放到单独的函数里返回Result
fn run() -> Result<(), String> {
    Err(String::from("Line1\nLine2"))
}

方法二:自定义错误类型并实现Display trait

如果你坚持要让main返回Result,可以自定义错误类型,实现Display trait,这样Rust会用Display格式输出错误,而不是Debug:

use std::fmt;

#[derive(Debug)]
struct MyError(String);

// 实现Display trait,指定错误的显示格式
impl fmt::Display for MyError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // 直接输出原始字符串,\n会被解析为换行
        write!(f, "{}", self.0)
    }
}

// 实现Error trait(Rust 1.13+ 后只要Debug和Display实现了就可以自动推导,这里手动实现是为了明确性)
impl std::error::Error for MyError {}

fn main() -> Result<(), MyError> {
    Err(MyError(String::from("Line1\nLine2")))
}

这两种方法都能让多行错误信息里的换行符正确显示,你可以根据自己的代码结构选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:05:35