Repository navigation
test added in gh-104067 has an fstring with an invalid escape sequence #105784
Description
Activity
- addedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Jun 14, 2023 @mattip CPython does not issue this warning
SyntaxWarning: invalid escape sequence '\?'until 3.12, though only for normal strings. What warning is PyPy3.9 emitting? (Note: try to minimize reproducing examples, as I did below ;-)@pablogsal In 3.12 and 3.13, f-strings are not warning about invalid escapes that get warnings in real strings. This seems like a bug.
>>> f'\?' '\\?' >>> len(f'\?') 2 >>> '\?' <stdin>:1: SyntaxWarning: invalid escape sequence '\?' '\\?'On python3.9.17 from Ubuntu, I get this
$ python3.9 -Walways -c "abc = 'abc'; print(f'listing for {abc}/\?x=123')" <string>:1: DeprecationWarning: invalid escape sequence \? listing for abc/\?x=123Adding an
rmakes it run without a warning$ python3.9 -Walways -c "abc = 'abc'; print(fr'listing for {abc}/\?x=123')" listing for abc/\?x=123Security patch #104067 was backported to 3.7, which is why it affects PyPy3.9.
@ethanfurman @JelleZijlstra Do the tests added in #104067 require invalid escapes without an 'r' prefix? Or could the escape be changed or the 'r' added?
@pablogsal In 3.12 and 3.13, f-strings are not warning about invalid escapes that get warnings in real strings. This seems like a bug.
Fixed!
Thanks. I see that was backported to 3.12. I am curious why not backport it to all versions that contain the test added in #104067 (maybe excepting ones that will no longer be released)? People running the test without precompiling pyc files will see a DeprecationWarning, no?Edit: GAA, I didn't actually look at the fix: #105800 is not what I expected.
Try as I might, I cannot get CPython3.9 to emit a
DeprecationWarningin thetest_httpservers.pytest. So I will add therin the PyPy port of the stdlib tests. I am not sure why the test does not emit the warning on CPython3.9, since the f-string needs anrif run outside the test, but 🤷$ python3.9 -Walways -c "abc = 'abc'; print(f'listing for {abc}/\?x=123')" <string>:1: DeprecationWarning: invalid escape sequence \? listing for abc/\?x=123Relevant: #105821
Here it only warned/failed when bytecompile was needed, so if there wasn't a .pyc file already for test_httpservers.
Bug report
In response to #104049, a fix and a new test were added in #104067 and related PRs. The test in test_httpserver.py uses an fstring with an escape sequence, but does not use
r:I think the code (in two places) should be include an
r:fr'listing for ...On PyPy this is causing the
test___all__.pytest to fail, since it emits a warning when compiling the*.pyto*.pyc. I am not sure why CPython is not seeing a similar problem. Perhapscompileallis run first? Or the warning filter captures the compilation as well as the import?Your environment