On 2022-09-10 19:46, c.bu...@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>

Historically, invalid escapes such as '\d' have always been treated as '\\d', but that is, and always, bad idea; it's better to treat them as an error (or reserved for future use).

At some point, in some future version of Python, they should become an error, but there's always a chance that some code out there could break, so there's a long period of deprecation first. How long? Who knows!

Just take note of the warning, and don't write bad escapes.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to