匹配语句中的海象运算符导致语法无效

Nea*_*roo 0 python python-3.x python-3.10

我不明白为什么以下 python 3.10+ 代码是无效语法:

match prop.type:
    case ns.Instance(content := ns.Class(name)) if name is not None:
        continue
Run Code Online (Sandbox Code Playgroud)

对我来说,这与那里记录的海象模式相匹配。怎么了?我收到以下错误:

case ns.Instance(content := ns.Class(name)) if name is not None:
                             ^^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

此外,pylace还向我显示以下错误(在编辑器中):

case ns.Instance(content := ns.Class(name)) if name is not None:
                ^
"(" was not closed
Run Code Online (Sandbox Code Playgroud)

并进一步

case ns.Instance(content := ns.Class(name)) if name is not None:
                                                               ^
Expected ":"
Run Code Online (Sandbox Code Playgroud)

不确定这在多大程度上相关,但 的定义Instance是:

case ns.Instance(content := ns.Class(name)) if name is not None:
                             ^^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

use*_*ica 5

海象图案不存在。您正在查看原始模式匹配提案的被取代的 PEP。那里的语法并不完全是最终实现的。

您应该查看PEP 634,特别是asmodels,它取代了海象模式:

case ns.Instance(ns.Class(name) as content) if name is not None:
Run Code Online (Sandbox Code Playgroud)