Dependabot更新pytest-asyncio后触发contextlib冻结异常问题
问题:pytest-asyncio 1.2更新后,MinIO S3Error触发FrozenInstanceError
问题场景
Dependabot将pytest-asyncio更新至1.2版本后,pytest测试出现异常:
当代码尝试访问不存在的MinIO Bucket时,会触发minio.error.S3Error,但此时contextlib尝试修改该异常的__traceback__字段,直接抛出dataclasses.FrozenInstanceError。
注:本次仅更新了pytest-asyncio,MinIO客户端版本及Python版本均无变更。
临时修复方案
提前创建测试所需的MinIO Bucket,避免触发S3Error,即可绕过该问题。
可能的原因分析
- S3Error的冻结特性:MinIO的
S3Error大概率是通过@dataclasses.dataclass(frozen=True)装饰的冻结数据类,这类实例的属性不允许被修改。 - pytest-asyncio 1.2的逻辑变更:该版本可能调整了异步测试中的异常追踪处理逻辑,在捕获异常后会尝试设置
__traceback__属性(用于生成更清晰的测试报错信息),而旧版本的pytest-asyncio没有这个操作,因此之前未触发该问题。
进一步排查方向
- 查阅pytest-asyncio 1.2的官方发布说明,确认是否有异常处理相关的代码变更。
- 直接查看MinIO客户端源码中
S3Error的定义,验证其是否为冻结数据类。 - 若需临时绕过且无法提前创建Bucket,可尝试捕获
S3Error后,创建一个非冻结的自定义异常实例并抛出,替代原异常。
内容的提问来源于stack exchange,提问作者A. Rabus
相关产品推荐
相关产品推荐

