我对铁 rust 还很陌生,所以这可能是个愚蠢的问题,但是:

我有一个接受字符串并返回&Path对象的函数,如果目录不存在,我希望这个函数抛出一个异常.

fn parse_path(root: Option<&str>) -> Result<&Path, ???> {
    // Parse a string into a path object else use the default value
    let path = match root {
        Some(p) => Path::new(p),
        _ => Path::new(DEFAULT_PATH),
    };

    if path.exists() {
        Ok(path)
    } else {
        ???
    }
}

在Python语言中,我只能说

if not os.path.exists(path):
    raise FileNotFoundError(path)

我不知道Rust中对应的语法是什么.任何帮助都将不胜感激.

注意:如果返回None,我曾考虑使用Option(path)panic!,但我更愿意返回一个特定的错误,以便可以在函数外部处理它

推荐答案

Err(Error::new(ErrorKind::NotFound, format!("FileNotFoundError: {}", path)))

别忘了导入ErrorErrorKind:

use std::io::{Error, ErrorKind};

了解更多关于ErrorKind

Rust相关问答推荐

为什么迭代器上的`. map(...)`的返回类型如此复杂?

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

如何对字符串引用的引用向量进行排序,而不是对最外层的引用进行排序?

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

使用极点数据帧时,找不到枚举结果的方法lazy()

什么时候和为什么S最好是按值或引用传递简单类型

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

为什么`AlternateScreen`在读取输入键时需要按Enter键?

如何迭代属性以判断相等性?

如何获取光标下的像素 colored颜色 ?

将特征与具有生命周期的关联类型一起使用时的生命周期方差问题

如何在Rust中使用Serde创建一个自定义的反序列化器来处理带有内部标记的枚举

简单 TCP 服务器的连接由对等重置错误,mio 负载较小

std::vector::shrink_to_fit 如何在 Rust 中工作?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

为什么不可变特征的实现可以是可变的?

如何刷新 TcpStream

了解 Rust 闭包:为什么它们持续持有可变引用?

为什么 File::read_to_end 缓冲区容量越大越慢?

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分