Python 如何定义自定义泛型类型以便pycharm能够很好地执行它

Python 如何定义自定义泛型类型以便pycharm能够很好地执行它,python,generics,pycharm,python-typing,Python,Generics,Pycharm,Python Typing,在我的项目中,我们采用了返回值模式,与您在go中看到的非常相似。 我们利用能够返回多个值来传达预期错误,如: def测试_模型(模型): 如果出现问题(型号): 不返回“有问题” 如果出现其他问题(型号): 返回None,“其他方面出错” 返回TestResult(),无 这很好,但是当我尝试添加类型暗示时,pycharm的打字理解遇到了一些问题 需要的是: def test_model(model)->Union[Tuple[TestResult,None],Tuple[None,str]]

在我的项目中,我们采用了返回值模式,与您在go中看到的非常相似。
我们利用能够返回多个值来传达预期错误,如:

def测试_模型(模型):
如果出现问题(型号):
不返回“有问题”
如果出现其他问题(型号):
返回None,“其他方面出错”
返回TestResult(),无
这很好,但是当我尝试添加类型暗示时,pycharm的打字理解遇到了一些问题

需要的是:

def test_model(model)->Union[Tuple[TestResult,None],Tuple[None,str]]
pycharm很好地理解了这一点:

所以我准备写一个实用程序类型,以避免写长联合类型,因为我们只对可能的左或右结果类型感兴趣

根据调查结果,我得出了以下结论:

EitherA=TypeVar(“EitherA”)
EitherB=TypeVar(“EitherB”)
或者=联合[Tuple[EitherA,None],Tuple[None,EitherB]]
但遗憾的是,pycharm无法解决这种复杂性:

我是否正确构造了
类型?

有没有办法让pycharm很好地识别它,或者以不同的方式编写它?

已知的bug,请投票支持(在标题附近竖起大拇指)