这个例子被认为是使用模式匹配时可能会遇到的“陷阱”:
NOT_FOUND = 400
retcode = 200
match retcode:
case NOT_FOUND:
print('not found')
print(f'Current value of {NOT_FOUND=}')
这是一个使用结构模式匹配意外捕获的示例。它会产生意想不到的输出:
not found
Current value of NOT_FOUND=200
这个问题以其他形式出现:
match x:
case int():
pass
case float() | Decimal():
x = round(x)
case str:
x = int(x)
在这个例子中,
str
需要加上括号,变成 str()
。如果没有括号,它会被“捕获”,str 内置类型将被替换为 x 的值。有没有一种defensive programming实践可以帮助避免这些问题并提供早期检测?