pub struct Error { /* private fields */ }
Expand description
Implementations§
source§impl Error
impl Error
sourcepub fn new<E>(kind: ErrorKind, error: E) -> Errorwhere
E: Into<Box<dyn Error + Send + Sync>>,
pub fn new<E>(kind: ErrorKind, error: E) -> Errorwhere E: Into<Box<dyn Error + Send + Sync>>,
根据已知的错误以及任意的错误有效载荷创建新的 I/O 错误。
此函数通常用于创建 I/O 错误,这些错误并非源于操作系统本身。
error
参数是将包含在此 Error
中的任意有效载荷。
请注意,此函数在堆上分配内存。
如果不需要额外的有效载荷,请使用来自 ErrorKind
的 From
转换。
Examples
use std::io::{Error, ErrorKind};
// 可以从字符串创建错误
let custom_error = Error::new(ErrorKind::Other, "oh no!");
// 错误也可以从其他错误中创建
let custom_error2 = Error::new(ErrorKind::Interrupted, custom_error);
// 在没有有效,载荷 (并且没有内存分配) 的情况下创建错误
let eof_error = Error::from(ErrorKind::UnexpectedEof);
Runsourcepub fn other<E>(error: E) -> Errorwhere
E: Into<Box<dyn Error + Send + Sync>>,
🔬This is a nightly-only experimental API. (io_error_other
#91946)
pub fn other<E>(error: E) -> Errorwhere E: Into<Box<dyn Error + Send + Sync>>,
io_error_other
#91946)从任意错误有效载荷创建新的 I/O 错误。
此函数通常用于创建 I/O 错误,这些错误并非源于操作系统本身。
它是 Error::new
与 ErrorKind::Other
的快捷方式。
Examples
#![feature(io_error_other)]
use std::io::Error;
// 可以从字符串创建错误
let custom_error = Error::other("oh no!");
// 错误也可以从其他错误中创建
let custom_error2 = Error::other(custom_error);
Runsourcepub fn last_os_error() -> Error
pub fn last_os_error() -> Error
sourcepub fn from_raw_os_error(code: RawOsError) -> Error
pub fn from_raw_os_error(code: RawOsError) -> Error
sourcepub fn raw_os_error(&self) -> Option<RawOsError>
pub fn raw_os_error(&self) -> Option<RawOsError>
返回此错误表示的操作系统错误 (如果有)。
如果此 Error
是通过 last_os_error
或 from_raw_os_error
构造的,则此函数将返回 Some
,否则它将返回 None
。
Examples
use std::io::{Error, ErrorKind};
fn print_os_error(err: &Error) {
if let Some(raw_os_err) = err.raw_os_error() {
println!("raw OS error: {raw_os_err:?}");
} else {
println!("Not an OS error");
}
}
fn main() {
// 将打印 "raw OS error: ..."。
print_os_error(&Error::last_os_error());
// 将打印 "Not an OS error"。
print_os_error(&Error::new(ErrorKind::Other, "oh no!"));
}
Run1.3.0 · sourcepub fn get_ref(&self) -> Option<&(dyn Error + Send + Sync + 'static)>
pub fn get_ref(&self) -> Option<&(dyn Error + Send + Sync + 'static)>
返回对此错误包装的内部错误 (如果有) 的引用。
如果此 Error
是通过 new
构造的,则此函数将返回 Some
,否则它将返回 None
。
Examples
use std::io::{Error, ErrorKind};
fn print_error(err: &Error) {
if let Some(inner_err) = err.get_ref() {
println!("Inner error: {inner_err:?}");
} else {
println!("No inner error");
}
}
fn main() {
// 将打印 "No inner error"。
print_error(&Error::last_os_error());
// 将打印 "Inner error: ..."。
print_error(&Error::new(ErrorKind::Other, "oh no!"));
}
Run1.3.0 · sourcepub fn get_mut(&mut self) -> Option<&mut (dyn Error + Send + Sync + 'static)>
pub fn get_mut(&mut self) -> Option<&mut (dyn Error + Send + Sync + 'static)>
返回对此错误包装的内部错误的可变引用 (如果有)。
如果此 Error
是通过 new
构造的,则此函数将返回 Some
,否则它将返回 None
。
Examples
use std::io::{Error, ErrorKind};
use std::{error, fmt};
use std::fmt::Display;
#[derive(Debug)]
struct MyError {
v: String,
}
impl MyError {
fn new() -> MyError {
MyError {
v: "oh no!".to_string()
}
}
fn change_message(&mut self, new_message: &str) {
self.v = new_message.to_string();
}
}
impl error::Error for MyError {}
impl Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "MyError: {}", &self.v)
}
}
fn change_error(mut err: Error) -> Error {
if let Some(inner_err) = err.get_mut() {
inner_err.downcast_mut::<MyError>().unwrap().change_message("I've been changed!");
}
err
}
fn print_error(err: &Error) {
if let Some(inner_err) = err.get_ref() {
println!("Inner error: {inner_err}");
} else {
println!("No inner error");
}
}
fn main() {
// 将打印 "No inner error"。
print_error(&change_error(Error::last_os_error()));
// 将打印 "Inner error: ..."。
print_error(&change_error(Error::new(ErrorKind::Other, MyError::new())));
}
Run1.3.0 · sourcepub fn into_inner(self) -> Option<Box<dyn Error + Send + Sync>>
pub fn into_inner(self) -> Option<Box<dyn Error + Send + Sync>>
消耗 Error
,并返回其内部错误 (如果有)。
如果此 Error
是通过 new
构造的,则此函数将返回 Some
,否则它将返回 None
。
Examples
use std::io::{Error, ErrorKind};
fn print_error(err: Error) {
if let Some(inner_err) = err.into_inner() {
println!("Inner error: {inner_err}");
} else {
println!("No inner error");
}
}
fn main() {
// 将打印 "No inner error"。
print_error(Error::last_os_error());
// 将打印 "Inner error: ..."。
print_error(Error::new(ErrorKind::Other, "oh no!"));
}
Runsourcepub fn downcast<E>(self) -> Result<Box<E>, Self>where
E: Error + Send + Sync + 'static,
🔬This is a nightly-only experimental API. (io_error_downcast
#99262)
pub fn downcast<E>(self) -> Result<Box<E>, Self>where E: Error + Send + Sync + 'static,
io_error_downcast
#99262)尝试将内部错误降级为 E
(如果有)。
如果这个 Error
是通过 new
构建的,那么这个函数将尝试对其执行降级,否则它将返回 Err
。
Examples
#![feature(io_error_downcast)]
use std::fmt;
use std::io;
use std::error::Error;
#[derive(Debug)]
enum E {
Io(io::Error),
SomeOtherVariant,
}
impl fmt::Display for E {
// ...
}
impl Error for E {}
impl From<io::Error> for E {
fn from(err: io::Error) -> E {
err.downcast::<E>()
.map(|b| *b)
.unwrap_or_else(E::Io)
}
}
Runsourcepub fn kind(&self) -> ErrorKind
pub fn kind(&self) -> ErrorKind
返回与此错误对应的 ErrorKind
。
这可能是由 Rust 代码构造自定义 io::Error 设置的值,或者如果此 io::Error
来自操作系统,它将是从系统错误编码推断的值。
有关详细信息,请参见 last_os_error
。
Examples
use std::io::{Error, ErrorKind};
fn print_error(err: Error) {
println!("{:?}", err.kind());
}
fn main() {
// 由于没有发生 (visibly) 错误,这可能会打印任何内容!
// 它可能会为未识别的 (非) 错误打印一个占位符。
print_error(Error::last_os_error());
// 将打印 "AddrInUse"。
print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
}
RunTrait Implementations§
source§impl Error for Error
impl Error for Error
source§impl<W> From<IntoInnerError<W>> for Error
impl<W> From<IntoInnerError<W>> for Error
source§fn from(iie: IntoInnerError<W>) -> Error
fn from(iie: IntoInnerError<W>) -> Error
从输入类型转换为此类型。
Auto Trait Implementations§
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
从拥有的值中借用。 Read more