[py-usr] flake8 gives me a W605 but Python don't

Thomas Passin list1 at tompassin.net
Sat Sep 10 17:07:50 EDT 2022


I don't know what flake8 is complaining about, but I think you want a 
literal "." character in front of the two "\d" escapes.  So "." should 
be replaced by "\." in two places.  In addition to using a raw string, 
that is.

If you may need to detect versions larger than 9 in any position, you 
would need to generalize your pattern, since "\d" is only going to look 
at a single character, IIUC.

If you could be sure that the version string would always look exactly 
like your example, you could avoid a regex by splitting:

_, version = version_string.split('Version:')
version_parts = version.split('.')

That's probably hoping for too much, though.

On 9/10/2022 2:46 PM, c.buhtz at posteo.jp wrote:
> Hello,
> 
> My `flake8` gives me a "W605 invalid escape sequence" [1] warning for
> this piece of example code.
> 
>      import re
>      
>      def foobar():
>          rex = re.compile('Version: \d+.\d+.\d+.*', re.MULTILINE)
>      
>          for match in rex.findall(' Version: 1.2.3 '):
>              print(match)
>      
>      
>      if __name__ == '__main__':
>          foobar()
> 
> But running this with Python 3.9.2 makes no problem. Python doesn't
> give me a `SyntaxWarning` or anything else. Python doesn't give me an
> error or warning. Only `flymake8` gives me this error.
> 
> I do understand what is wrong with the pattern string in `compile()`.
> There should be a `r''` or the regex-escape characters should be
> escaped them selfs (e.g. `'Version: \\d'`).
> 
> But my question is about why Python doesn't give me an error about it
> and why does it work. The pattern matches. Shouldn't there be an error
> or something? Does Python identify this string as an r-String by itself?
> 
> [1] -- <https://www.flake8rules.com/rules/W605.html>



More information about the Python-list mailing list