Skip to content

Allow string unpacking again. #13823

Closed

Description

@JulienPalard

String unpacking has been disallowed in #6406, where some comments ask for it to be allowed again. I'm opening an issue to track this better than comments in a closed issue.

Bug Report

I think mypy should allow string unpacking, as it's normal Python semantic.

To Reproduce

QUOTE_PAIRS = [
    "''",
    '""',
    "<>",
    "()",
    "[]",
    "{}",
]

for opening, closing in QUOTE_PAIRS:
    print(opening, closing)

Expected Behavior

I expected this to pass.

Actual Behavior

$ mypy pairs.py 
pairs.py:10: error: Unpacking a string is disallowed
pairs.py:11: error: Cannot determine type of "opening"
pairs.py:11: error: Cannot determine type of "closing"
Found 3 errors in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: mypy 0.971 (compiled: yes)
  • Mypy command-line flags: ø
  • Mypy configuration options from mypy.ini (and other config files): ø
  • Python version used: irrelevant, but reproduced in 3.9, 3.10, 3.11.

Activity

  1. hauntsaninja commented on Oct 6, 2022

    @hauntsaninja
    Collaborator

    At a minimum it should have its own error code, so you can do --disable-error-code string-unpacking. Maybe the thing that should have a special case error is multi-assignment to a dict[str, something]

  2. sfc-gh-tteixeira commented on Jun 22, 2023

    @sfc-gh-tteixeira

    At the core of this feature request is the question: Is MyPy a type-checker, or a combination of type-checker and linter?

    If it's purely a type-checker (as I assume), then I agree with the @JulienPalard 's post: String unpacking is valid Python code, and it's a perfectly well-defined operation in terms of typing.

    If MyPy is both a type-checker and a linter, then it becomes a matter of taste.

  3. added a commit that references this issue on Jun 24, 2023
    12cc931
  4. added a commit that references this issue on Dec 2, 2025
    c2a9642
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions