4个版本
0.2.2 | 2021年8月21日 |
---|---|
0.2.1 | 2021年8月21日 |
0.2.0 | 2021年8月21日 |
0.1.0 | 2021年8月21日 |
#5 在 #ergonomic
1,012 每月下载量
在 200 个crate中使用 (3 直接)
9KB
140 行
此crate提供了一个宏,它使其他编程语言的熟悉try-catch
语法可用。它可以用来轻松地按类型而不是值分组错误,并动态地管理它们。
use try_catch::catch;
use std::*;
use serde_json::Value;
catch! {
try {
let number: i32 = "10".parse()?;
let data = fs::read_to_string("data.json")?;
let json: Value = serde_json::from_str(&data)?;
}
catch error: io::Error {
println!("Failed to open the file: {}", error)
}
catch json_err: serde_json::Error {
println!("Failed to serialize data: {}", json_err)
}
catch err {
println!("Error of unknown type: {}", err)
}
};
注意,如果没有通配符,编译器将警告未使用的返回值。它也可以用作表达式
// We can guarantee that all errors are catched
// so the type of this expression is `i32`.
// It can be guarantieed because the final catch
// does not specify an Error type.
let number: i32 = catch! {
try {
let number: i32 = "10".parse()?;
number
} catch error {
0
}
};
// we can't know for sure if all possible errors are
// handled so the type is still Result.
let result: Result<i32, _> = catch! {
try {
let number: i32 = "10".parse()?;
number
} catch error: io::Error {
0
}
};
依赖项
~1.5MB
~35K SLoC