Skip to content

Conditional import of izip is problematic #1026

Closed

Description

@gvanrossum

Test code:

try:
    from itertools import izip
except ImportError:
    izip = zip

In Python 3 mode, this complains that itertools doesn't define izip. This is correct but maybe inside try/except ImportError this should not be an error.

In Python 2 mode, this gives the dreaded "Incompatible types" errror:

/Users/guido/mypy_tests/mypy_izip.py:4: error: Incompatible types in assignment (expression has type overloaded function, variable has type overloaded function)

I guess this is another case of #649 that isn't handled yet.

Activity

  1. JukkaL commented on Dec 1, 2015

    @JukkaL
    Collaborator

    Yeah, we could consider this is special case of #649, but we can keep ImportError related problems where mypy should ignore a block separate in this issue. #649 can cover cases where all conditional definitions should take effect.

    Another related case that is pretty common in Python 2 std library code is shown below. In this case both imports work, but mypy can't deal with a multiply defined class. Maybe we should just ignore one of the class definitions here for now, and maybe give an optional warning in the future:

    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO
    
  2. AlexWaygood commented on Mar 31, 2022

    @AlexWaygood
    Member

    Closing as a duplicate of #1153, which (although it's a newer issue) has more detailed discussion and is less Python 2-specific (refs #12237)

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions