首页 > 解决方案 > mypy 错误:模块没有属性“__path__”

问题描述

我正在尝试正确注释在 python 包上运行的函数中的类型。根据经验,我知道一个包有__path__属性。在运行时,包(带有 的文件夹__init__.py)和模块(.py 文件)的类型<class 'module'>都是types.ModuleType; 但是模块没有__path__属性。

使用内置的演示:

import asyncio
import turtle

print(type(asyncio))  # <class 'module'>
print(type(turtle))  # <class 'module'>

print(asyncio.__path__) # [.../lib/python3.7/asyncio']
print(turtle.__path__)  # AttributeError: module 'turtle' has no attribute '__path__'

包的类型是什么以及如何注释它?

示例代码:

import types

def foo(x: types.ModuleType) -> str:
    return x.__path__

使用 mypy 检查失败error: Module has no attribute "__path__"。我应该使用哪种类型来表示只有包而不是模块应该传递给我的函数?

标签: pythontype-hintingmypytypeshed

解决方案


推荐阅读