Python 中的“pass”相当于什么?

Avi*_*ava 3 rust

我想检查请求的结果是否有任何问题。我将其分为两类:i)服务器错误,ii)其他不成功的原因。第三类是,结果实际上是成功的。然而,在第三类中,我什么都不想做。

所以,我想要的代码是:

if res.status().is_server_error() {
        panic!("server error!");
    } else if !(res.status.is_success()){
        panic!("Something else happened. Status: {:?}", res.status());
    } else{
        pass;
    }
Run Code Online (Sandbox Code Playgroud)

我知道实现此结果的其他方法:使用match, ifs 而不是if else if. 但我想了解 对应的关键字是什么pass,就像我们在 Python 中一样。我的目标是:如果结果成功,就继续前进,如果不成功,有两种方法来处理这种恐慌。

nlt*_*lta 14

看哪!

\n
if predicate {\n    do_things();\n} else {\n    // pass\n}\n
Run Code Online (Sandbox Code Playgroud)\n

或者甚至更好

\n
if predicate {\n    do_things();\n} // pass\n
Run Code Online (Sandbox Code Playgroud)\n

或者正如我\xe2\x80\x99最近将其称为隐式+传递系统

\n
if predicate {\n    do_things();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

严肃地说,生锈没有通过也不需要通过。至于为什么它存在于python中,查看这个答案

\n


use*_*342 12

Python 需要pass,因为它使用基于缩进的块,所以它需要一些语法来“不执行任何操作”。例如,这将是 Python 程序中的语法错误:

# syntax error - function definition cannot be empty
def ignore(_doc):
    # do nothing

count = process_docs(docs, ignore)  # just count the docs
Run Code Online (Sandbox Code Playgroud)

ignore函数必须包含一个,而该块又必须包含至少一个语句。我们可以插入一个虚拟语句,例如None,但 Python 提供了pass它不会编译为任何内容并向人类读者发出信号(不执行任何操作)的意图。

这在 Rust 中是不需要的,因为 Rust 使用大括号来表示块,所以人们总是可以简单地使用以下命令创建一个空块{}

// no error - empty blocks are fine
fn ignore(_doc: &Document) {
    // do nothing
}

let count = process_docs(docs, ignore);  // just count the docs
Run Code Online (Sandbox Code Playgroud)

当然,在惯用的 Python 和 Rust 中,人们会使用闭包来完成像上述ignore函数这样简单的事情,但仍然存在一些情况,其中pass和 空块确实有用。