You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pyrsistent.typing.PSet运行报错,如何正确导入或注解?

解决Pyrsistent类型注解运行时AttributeError问题

问题现象

一段使用Pyrsistent的代码能通过mypy类型检查,但运行时提示AttributeError: module 'pyrsistent' has no attribute 'typing',代码如下:

import pyrsistent
a = pyrsistent.pset([1,2,3]) 
#reveal_type(a) #执行mypy file.py,返回类型pyrsistent.typing.PSet[buildins.int]

#b : pyrsistent.typing.PSet[int] = a 
#运行时报错:AttributeError: module 'pyrsistent' has no attribute 'typing'
#但mypy无报错

print ( a )

解决方案

方案1:显式导入pyrsistent.typing子模块

直接导入该子模块,让Python运行时能找到对应的类型定义:

import pyrsistent
from pyrsistent import typing

a = pyrsistent.pset([1,2,3]) 
b: typing.PSet[int] = a 
print(a)

方案2:使用字符串形式的类型注解

利用PEP 484支持的字符串类型提示,运行时不会解析该类型,仅类型检查器处理:

import pyrsistent

a = pyrsistent.pset([1,2,3]) 
b: "pyrsistent.typing.PSet[int]" = a 
print(a)

方案3:仅在类型检查时导入类型

借助typing.TYPE_CHECKING常量,该常量在运行时为False,不会执行导入逻辑,避免运行时开销:

import pyrsistent
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from pyrsistent.typing import PSet

a = pyrsistent.pset([1,2,3]) 
b: PSet[int] = a 
print(a)

问题原因

Pyrsistent的typing子模块仅包含类型定义,且可能仅通过类型 stub 文件(.pyi)提供给类型检查器(如mypy),Python运行时默认不会加载该子模块。因此直接引用pyrsistent.typing会触发属性不存在的错误,而mypy能识别是因为它读取了stub文件中的类型定义。

内容的提问来源于stack exchange,提问作者josinalvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:57:09