2016-09-15 73 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編譯regex對象的類型]的可能的複製http://stackoverflow.com/questions/6102019/type-of-compiled-正則表達式-對象中的Python) –

回答

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): 
    ...