为什么此代码会失败:
OKAY = 200
NOT_FOUND = 404
INTERNAL_SERVER_ERROR = 500
match status:
case OKAY:
print('It worked')
case NOT_FOUND:
print('Unknown')
case INTERNAL_SERVER_ERROR:
print('Out of service')
case _:
print('Unknown code')
它会生成以下错误消息:
File "/Users/development/Documents/handler.py", line 66
case OKAY:
^^^^
SyntaxError: name capture 'OKAY' makes remaining patterns unreachable
这个错误消息意味着什么?我如何修复代码以使其正常工作
问题的原因
case子句中的变量名被视为name capture pattern
它总是匹配并尝试为变量名赋值。几乎可以肯定,这并非本意
因为第一个匹配的case获胜并且
case OKAY
始终匹配,所以将永远不会检查其他case子句这就解释了错误消息:
解决问题的关键
我们需要将名称捕获模式替换为非捕获模式,例如使用
.
操作符进行属性查找的value pattern。点是匹配非捕获模式的关键实现这一点的方法有很多。一种是将名称放在类命名空间中:
现在,
case ResponseCode.NOT_FOUND: ...
是一个值模式(因为点),不会捕获实现相同效果的另一种方法是将常数移动到它们自己的模块中,并使用点引用它们:
除了创建类或模块外,还可以创建integer enumeration以实现相同的效果:
对于HTTP响应代码,已经在标准库中找到的HTTPStatus类中为您创建了整数枚举
示例解
这是一个解决原始问题的解决方案。枚举属性查找的
.
的存在是匹配和案例将其识别为value pattern的关键:相关问题 更多 >
编程相关推荐