2016-09-15 2 views
2

Если я скомпилировать регулярное выражениеКак я могу получить регулярное выражение тип шаблона для MyPy

>>> type(re.compile("")) 
<class '_sre.SRE_Pattern'> 

И хочу передать, что регулярное выражение для функции и использовать Mypy для типа проверки

def my_func(compiled_regex: _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_Pattern не я mportable.

+0

Возможная Дубликат [Тип объекта скомпилированного регулярных выражений в Python] (http://stackoverflow.com/questions/6102019/type-of-compiled- регулярное выражение-объект-в-питон) –

ответ

5

mypy очень строга с точки зрения того, что он может принять, так что вы не можете просто генерировать типы или использования мест импорта, что Безразлично» t знать, как поддерживать (в противном случае он просто будет жаловаться на заглушки библиотек для синтаксиса для стандартной библиотеки, импорт которых не понимает). Полное решение:

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 
2

Да, типы, используемые модулем re, фактически не доступны по названию. Вы должны будете использовать typing.re типы аннотаций типа вместо:

import typing 

def my_func(compiled_regex: typing.re.Pattern): 
    ... 
Смежные вопросы