Bug report
Bug description:
import io, tokenize
input_s = """
def foo():
x = 1
x = "some_very_long_expression"
"""
try:
list(tokenize.generate_tokens(io.StringIO(input_s).readline))
except IndentationError as e:
print(f"{e.offset = }")
The line x = "some_very_long_expression" is indented with 3 spaces instead of 4, so we get an error.
We would expect the offset to be around 3, since that is where the issue is.
On python 3.12+, the offset is instead 35, equal to the length of the line + 1.
This appears to be caused by the refactor of tokenize done in 3.12 for PEP 701
Potentially related to #84515
Funnily enough, the exact same thing seems to have happened around 3.8 #75676
Tested versions:
| Version |
e.offset |
| 3.11.15 |
3 |
| 3.12.13 |
35 |
| 3.13.13 |
35 |
| 3.14.4 |
35 |
| 3.15.0b1 |
35 |
Testing command:
nix-shell -p python311 --run "python --version && python tmp.py"
(and replace 311 by 312, 313, etc)
CPython versions tested on:
3.15
Operating systems tested on:
Linux
Bug report
Bug description:
The line
x = "some_very_long_expression"is indented with 3 spaces instead of 4, so we get an error.We would expect the offset to be around 3, since that is where the issue is.
On python 3.12+, the offset is instead 35, equal to the length of the line + 1.
This appears to be caused by the refactor of
tokenizedone in 3.12 for PEP 701Potentially related to #84515
Funnily enough, the exact same thing seems to have happened around 3.8 #75676
Tested versions:
Testing command:
nix-shell -p python311 --run "python --version && python tmp.py"(and replace 311 by 312, 313, etc)
CPython versions tested on:
3.15
Operating systems tested on:
Linux