如何修复Pyright提示的‘Expected 0 positional arguments’类型注解报错
问题修复方案
报错原因
Pyright提示「Expected 0 positional arguments」(期望0个位置参数),是因为Type[T]仅表示该参数是能生成T实例的类,但并未约束这个类的构造函数支持接收一个字符串参数。调用out(inp)时,Pyright无法确认目标类是否兼容这种传参方式,因此抛出错误。
修复代码
from typing import Type, Optional, Protocol class StrConstructible(Protocol): def __init__(self, s: str) -> None: ... def mymethod[T: StrConstructible](inp: str, out: Type[T]) -> Optional[T]: try: return out(inp) except Exception: return None
修复说明
- 定义协议约束:通过
StrConstructible协议明确规定,被传入的类必须拥有一个接受单个字符串参数的构造函数,让Pyright能够识别合法的类类型。 - 泛型约束:给泛型
T添加StrConstructible约束,确保out参数对应的类符合协议要求,消除类型检查报错。 - 异常处理:增加
try-except块捕获构造过程中可能出现的异常,保证函数始终返回Optional[T]类型的值(成功返回实例,失败返回None),符合返回值注解要求。
内容的提问来源于stack exchange,提问作者Camden Narzt
相关产品推荐
相关产品推荐

