Python 大小写匹配显示错误,列表元素作为大小写。预期的 ”:”
Python match case shows error with list element as case. Expected ":"
您好,我在使用新添加的匹配大小写功能,但遇到了这个问题。
这是我的代码:
from typing import List
class Wee():
def __init__(self) -> None:
self.lololol: List[str] = ["car", "goes", "brrrr"]
def func1(self):
self.weee = input()
try:
match self.weee:
case self.lololol[0]:
print(self.lololol[0])
case self.lololol[1]:
print(self.lololol[1])
case _:
print(self.lololol[2])
except SyntaxError as e:
print(e)
waa = Wee()
waa.func1()
在第 11 行和第 13 行,错误显示为 SyntaxError: expected ':'
。但是,当我将 case self.lololol[0]:
更改为 case "car":
时,错误消失了。发生了什么事?
您不能使用任意表达式作为模式(因为那样有时会产生歧义),只能 a certain subset.
如果你想匹配列表的元素,你可能应该根据情况,将它们设为单独的变量,或者使用 list.index
.
这是因为 match
case
语句用于 结构 匹配。具体来说 PEP 635 说:
Although patterns might superficially look like expressions, it is important to keep in mind that there is a clear distinction. In fact, no pattern is or contains an expression. It is more productive to think of patterns as declarative elements similar to the formal parameters in a function definition.
具体来说,普通变量用作捕获模式而不是匹配模式 - 绝对 不是 C/C++ 程序员所期望的... - 和函数或下标或只是不允许。
从实用的角度来看,只能使用文字或点分表达式作为匹配模式。
您好,我在使用新添加的匹配大小写功能,但遇到了这个问题。
这是我的代码:
from typing import List
class Wee():
def __init__(self) -> None:
self.lololol: List[str] = ["car", "goes", "brrrr"]
def func1(self):
self.weee = input()
try:
match self.weee:
case self.lololol[0]:
print(self.lololol[0])
case self.lololol[1]:
print(self.lololol[1])
case _:
print(self.lololol[2])
except SyntaxError as e:
print(e)
waa = Wee()
waa.func1()
在第 11 行和第 13 行,错误显示为 SyntaxError: expected ':'
。但是,当我将 case self.lololol[0]:
更改为 case "car":
时,错误消失了。发生了什么事?
您不能使用任意表达式作为模式(因为那样有时会产生歧义),只能 a certain subset.
如果你想匹配列表的元素,你可能应该根据情况,将它们设为单独的变量,或者使用 list.index
.
这是因为 match
case
语句用于 结构 匹配。具体来说 PEP 635 说:
Although patterns might superficially look like expressions, it is important to keep in mind that there is a clear distinction. In fact, no pattern is or contains an expression. It is more productive to think of patterns as declarative elements similar to the formal parameters in a function definition.
具体来说,普通变量用作捕获模式而不是匹配模式 - 绝对 不是 C/C++ 程序员所期望的... - 和函数或下标或只是不允许。
从实用的角度来看,只能使用文字或点分表达式作为匹配模式。