Skip to content

mypy does not recognize os.name #13002

Open

Description

@amatyukhin0

Bug Report

mypy respects platform conditions using sys.platform variable, but do not recognize os.name.

Related issue: #8166

To Reproduce

Consider this piece of code, assuming we are on Linux:

import os
import signal

if os.name == 'nt':
    signal_type = signal.SIGBREAK
else:
    signal_type = signal.SIGTERM

Expected Behavior

mypy should not raise any error.

Actual Behavior

mypy fails with:

main.py:5: error: Module has no attribute "SIGBREAK"
Found 1 error in 1 file (checked 1 source file)

Note that replacing os.name == 'nt' with sys.platform == 'win32' fixes this issue.

Environment

  • Mypy version used: 0.961
  • Python version used: 3.10
  • Operating system: Linux

Activity

  1. Avasam commented on Feb 21, 2024

    @Avasam
    SponsorContributor

    Similar to #8166 (comment)
    This is understood by the Pylance language server (and I assume pyright, although I haven't properly tested)

    setuptools for example, has this snippet of code, which causes error: Cannot find implementation or library stub for module named "dl" [import-not-found] on Windows:

    have_rtld = False
    use_stubs = False
    
    if sys.platform == "darwin":
        use_stubs = True
    elif os.name != 'nt':
        try:
            import dl # type: ignore[import-not-found] # https://github.com/python/mypy/issues/13002
    
            use_stubs = have_rtld = hasattr(dl, 'RTLD_NOW')
        except ImportError:
            pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions