url - 捕获 Rust 中的错误(Rust URL)

标签 url error-handling rust

请注意我使用的是 Rust 0.13.0 的夜间构建

首先,我是 Rust 的初学者,并且仍在尽可能多地获取有关该语言的信息。在我的整个消费过程中,我发现很少的一个主题是错误处理。因此,当我第一次尝试在我的代码中使用外部库时,我很快就对应该如何使用返回给我的 Material 感到困惑。

为了帮助解释我的困惑,我将引用 rust-url图书馆。这是在 documentation 中找到的一些示例代码:

use url::{Url, InvalidIpv6Address};

assert!(Url::parse("http://[:::1]") == Err(InvalidIpv6Address))

这对我来说非常简单。但是,我的下一个问题是:其他错误怎么办?我进一步研究了 ParseError 枚举,发现了 15 种以上可能由格式错误的 URL 产生的其他类型的错误。

那么,我的问题是,处理所有这些不同情况的正确方法是什么?我是否应该有一个冗长的匹配来为每个匹配发出专门的消息?有没有办法一次性消耗掉它们?

如果这个问题没有一个单一的答案,我深表歉意,但谷歌并没有说清楚,我希望在我继续以错误的方式对我的项目的其余部分进行编码之前获得对此的反馈。

最佳答案

ParseError 枚举实现了 Show 特性,带有 a custom useful message for each variant ,所以当你到达实际处理解析错误的最后一步时(例如,在以你认为合适的任何方式操作 Result 之后),你可以将错误可能性视为一个黑框:

fn download(s: &str) {
    match Url::parse(s) {
        Ok(url) => { ... }
        Err(e) => {
            println!("Could not parse '{}'. {}.", s, e);
        }
    }
}

将打印类似 Could not parse 'http://[::1]' 的内容。无效的 IPv6 地址。

(我提交了 #43 关于使 Show 消息小写,以便它在更复杂的错误消息中更好地流动。)

关于url - 捕获 Rust 中的错误(Rust URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539766/

相关文章:

variables - SEO 友好 URL,每种语言使用一个变量

php - 如何保护没有表单的php页面

rust - 取编译时已知的一定长度的切片

rust - 无法将闭包传递给 `Hyper::service_fn`

rust - Serde MsgPack 版本控制

c# - html agility pack url scraping——获取完整的html链接

python - 将相对 URL 应用于绝对 URL

android - facebook 分享图像 Url 以及 android 中的链接

ios - 如果我没有使用 Xcode 启动它,我可以显示应用程序中发生的错误吗?

error-handling - 为什么标准错误需要在main中装箱,而不是io错误?