Python 如何为MyPy获取正则表达式模式类型
如果我编译一个正则表达式Python 如何为MyPy获取正则表达式模式类型,python,mypy,Python,Mypy,如果我编译一个正则表达式 >>> type(re.compile("")) <class '_sre.SRE_Pattern'> 我遇到了这个问题 >>> import _sre >>> from _sre import SRE_Pattern Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportEr
>>> type(re.compile(""))
<class '_sre.SRE_Pattern'>
我遇到了这个问题
>>> import _sre
>>> from _sre import SRE_Pattern
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'SRE_Pattern'
导入
>>>从sre导入sre模式
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:无法导入名称“SRE_模式”
似乎您可以导入
\u sre
,但由于某些原因,sre\u模式
不可导入。是的,re
模块使用的类型实际上无法通过名称访问。您需要将类型改为用于类型批注:
import typing
def my_func(compiled_regex: typing.re.Pattern):
...
mypy
对于它可以接受的内容非常严格,因此您不能只生成它不知道如何支持的类型或使用导入位置(否则它只会抱怨库存根,因为它不理解标准库导入的语法)。完整解决方案:
import re
from typing import Pattern
def my_func(compiled_regex: Pattern):
return compiled_regex.flags
patt = re.compile('')
print(my_func(patt))
运行示例:
$ mypy foo.py
$ python foo.py
32
从Python3.9开始键入。模式是 自3.9版以来已弃用:现在重新支持[]的类模式和匹配。请参阅PEP 585和通用别名类型 您应该使用类型
re.Pattern
:
重新导入
def some_func(编译的正则表达式:re.Pattern):
...
您可以使用re.\u pattern\u type
代替可能的重复。请注意,pattern
已移动到typing
。
$ mypy foo.py
$ python foo.py
32