[Tutor] type hint woes regex

ingo ingoogni at gmail.com
Sat Mar 2 06:07:28 EST 2019


In a first attempt to add types I ran into trouble. First a code snippet 
( full code at 
https://gist.github.com/ingoogni/460676b11e5a04ed3a3ac93ae0e1fddd )

_matchline: Pattern[str] = re.compile(r"(?P<blank>^\s*$)|(?P<ind>[\t]*)"
                         "((?P<lnid>[A-Z]+):)?([ \t]*)(?P<content>.*)")


def proc_matchlns(momfile: TextIO) -> Iterator[Dict[str, Union[str, int]]]:
   for i, ln in enumerate(momfile, 1):
     match: Match[str] = _matchline.match(ln) #error 1
     m: Dict[str, str] = match.groupdict()    #error 2
     m['ln'] = ln.rstrip()
     m['ln#'] = i                             #error 3
     yield m                                  #error 4

Depending on how I add types mypy nags on various aspects:

error 1:
   match seems to want type Optional[Match[str]], but why? The regex 
always has a result (I hope).

error 2:
   when I give in to the above, the result is that it errors on not 
being able to de a groupdict on a null type.

error 3:
   groupdict results in a type dict[str, str], but I want to add an int. 
Can I change the type? (In this specific case could change i to str(i) 
as it has no influence on the program)

error 4:
   result of 3 and output type, type of m and specified output type 
don't match.


Ingo



More information about the Tutor mailing list