Thanks to visit codestin.com
Credit goes to github.com

Skip to content

internal error while formatting with-statement with tuple and none tuple argumentΒ #4642

@15r10nk

Description

@15r10nk

Describe the bug

The following code can not be parsed/formatted by black:

with (name_5, name_4), name_5:
    pass

(playground)

black reported the following error:

> black -l 100 -C -t py313 bug.py
error: cannot format bug.py: INTERNAL ERROR: Black 25.1.1.dev21+g944a38e.d20250317 on Python (CPython) 3.13.1 produced code that is not equivalent to the source.  Please report a bug on https://github.com/psf/black/issues.  This diff might be helpful: /tmp/blk_sxhcobwt.log

Oh no! πŸ’₯ πŸ’” πŸ’₯
1 file failed to reformat.

the reported diff in /tmp/blk_sxhcobwt.log is:

--- src
+++ dst
@@ -5,30 +5,29 @@
         Pass(
         )  # /Pass
         items=
         withitem(
             context_expr=
-            Tuple(
+            Name(
                 ctx=
                 Load(
                 )  # /Load
-                elts=
-                Name(
-                    ctx=
-                    Load(
-                    )  # /Load
-                    id=
-                    'name_5',  # str
-                )  # /Name
-                Name(
-                    ctx=
-                    Load(
-                    )  # /Load
-                    id=
-                    'name_4',  # str
-                )  # /Name
-            )  # /Tuple
+                id=
+                'name_5',  # str
+            )  # /Name
+            optional_vars=
+            None,  # NoneType
+        )  # /withitem
+        withitem(
+            context_expr=
+            Name(
+                ctx=
+                Load(
+                )  # /Load
+                id=
+                'name_4',  # str
+            )  # /Name
             optional_vars=
             None,  # NoneType
         )  # /withitem
         withitem(
             context_expr=

but it can be parsed by cpython:

from ast import parse
parse(
    'with (name_5, name_4), name_5:\n'
    '    pass\n'
)

The code can be formatted with black -l 100 -C -t py313 bug.py --fast:

with name_5, name_4, name_5:
    pass

Environment

  • Black's version: current main (950ec38)
  • OS and Python version: Linux/Python 3.13.1 (main, Jan 14 2025, 22:47:38) [Clang 19.1.6 ]

Additional context

The bug was found by pysource-codegen (see #3908)
The above problem description was created from a script,
let me know if you think it can be improved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    T: bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions