Skip to content

Can't index named tuple by defined constant #3078

Closed
@gvanrossum

Description

@gvanrossum

Example:

from typing import *
A = NamedTuple('A', [('x', int), ('y', str)])
X = 0
Y = 1
a = A()
reveal_type(a[X])  # expected int, but is "Tuple index must be an integer literal"
reveal_type(a[Y])  # expected str, but same error

There's a real-world use case for this: the stats stdlib module defines constants like ST_MODE that are supposed to be used as indices into os.stat_result (which was turned into a NamedTuple in python/typeshed#1103).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions