如何修复Python 3.10模式匹配报错TypeError: called match pattern must be a type
问题解答
报错原因排查
你遇到的TypeError: called match pattern must be a type报错,最常见的原因是当前Python运行环境中内置的int标识符被其他变量覆盖,不再指向整数类型。你可以执行print(type(int))验证:正常输出应为<class 'type'>,如果输出其他内容,说明int被自定义变量覆盖,重启Python解释器即可恢复。
另外需要注意:int(0|1)的类模式本身在Python 3.10及以上版本是合法写法,但该模式会先校验匹配目标是否为int类型,你示例中的匹配目标是0.0(float类型),即便没有报错也不会命中该分支。
正确实现方案
根据你的匹配需求,可以选择以下两种写法:
需求1:仅匹配int类型的0或1
写法1(兼容性最佳,全3.10+版本支持)
match 待匹配变量: case int() as val if val in {0, 1}: print(1)
写法2(类模式位置匹配,写法更简洁)
match 待匹配变量: case int(0 | 1): print(1)
需求2:匹配数值等于0或1(支持float类型的0.0、1.0等非int值)
使用守卫做数值校验即可:
match 待匹配变量: case val if float(val) in {0.0, 1.0}: print(1)
如果不需要兼容float类型,仅匹配精确的int值0、1,还可以进一步简化为值模式:
match 待匹配变量: case 0 | 1: print(1)
内容的提问来源于stack exchange,提问作者user1443098
相关产品推荐
相关产品推荐

