Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Tokenizer produces different output on Windows on py312 for ends of files #105017

Closed
Assignees
pablogsallysnikolaou
Labels
3.12only security fixes3.13bugs and security fixesOS-windowstype-bugAn unexpected behavior, bug, or error
@AlexWaygood

Description

@AlexWaygood

Bug report

If you copy and paste the following code into arepro.py file and runpython -m tokenize on it on a Windows machine, the output is different on 3.12/3.13 compared to what it was on 3.11 (the file ends with a single newline):

foo='bar'spam='eggs'

On Python 3.11, on Windows, the output is this:

> python -m tokenize cpython/repro.py0,0-0,0:            ENCODING       'utf-8'1,0-1,3:            NAME           'foo'1,4-1,5:            OP             '='1,6-1,11:           STRING         "'bar'"1,11-1,13:          NEWLINE        '\r\n'2,0-2,4:            NAME           'spam'2,5-2,6:            OP             '='2,7-2,13:           STRING         "'eggs'"2,13-2,15:          NEWLINE        '\r\n'3,0-3,0:            ENDMARKER      ''

On Python 3.13 (@6e62eb2) on Windows, however, the output is this:

> python -m tokenize repro.py0,0-0,0:            ENCODING       'utf-8'1,0-1,3:            NAME           'foo'1,4-1,5:            OP             '='1,6-1,11:           STRING         "'bar'"1,11-1,12:          NEWLINE        '\n'2,0-2,4:            NAME           'spam'2,5-2,6:            OP             '='2,7-2,13:           STRING         "'eggs'"2,13-2,14:          NEWLINE        '\n'3,0-3,1:            NL             '\n'4,0-4,0:            ENDMARKER      ''

There appear to be two changes here:

  • All the NEWLINE tokens now have\n values, whereas on Python 3.11 they all had\r\n values
  • There is an additional NL token at the end, immediately before the ENDMARKER token.

As discussed inPyCQA/pycodestyle#1142, this appears to be Windows-specific, andmay be the cause of a large number of spurious W391 errors from the pycodestyle linting tool. (W391 dictates that there should be one, and only one, newline at the end of a file.) The pycodestyle tool is included in flake8, meaning that test failures in pycodestyle can cause test failures for other flake8 plugins. (All tests forthe flake8-pyi plugin, for example, currently fail on Python 3.13 on Windows.)

Your environment

Python 3.13.0a0 (heads/main:6e62eb2e70, May 27 2023, 14:00:13) [MSC v.1932 64 bit (AMD64)] on win32

Linked PRs

Metadata

Metadata

Labels

3.12only security fixes3.13bugs and security fixesOS-windowstype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp