Python 3.11无法从warnings模块导入deprecated类的原因咨询
问题原因解析
deprecated并非Python 3.11的公共导出API:你在warnings.py里看到的deprecated类是模块内部实现的组件,并没有被添加到warnings模块的__all__列表中,这意味着Python不鼓励直接从warnings导入它,强行导入就会触发cannot load deprecated from warnings错误。- 版本差异导致的误解:你查看的代码属于Python 3.12及更新版本的分支,在这些版本中
deprecated才被正式纳入warnings模块的公共API,支持直接导入使用;而Python 3.11里该装饰器并未对外暴露,无法直接导入。
如果需要在Python 3.11中使用类似功能,有两种替代方案:
- 使用第三方库,比如
deprecation或deprecated包,安装后直接调用对应装饰器 - 手动实现一个简单的装饰器,利用
warnings.warn()函数触发 deprecation 警告:
import warnings from functools import wraps def deprecated(func): @wraps(func) def wrapper(*args, **kwargs): warnings.warn(f"{func.__name__} 已被弃用", DeprecationWarning, stacklevel=2) return func(*args, **kwargs) return wrapper @deprecated def test(): print("test") test()
内容的提问来源于stack exchange,提问作者Barry
相关产品推荐
相关产品推荐

