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

Python中如何模拟含UNSAFE_LEGACY_RENEGOTIATION_DISABLED的SSLError?

如何创建用于测试的Mock ssl.SSLError实例

你遇到的问题根源是ssl.SSLError的字符串表现依赖于初始化参数,而非直接设置reason属性。直接赋值reason不会让实例的字符串输出包含你需要的错误标识。

正确构造符合要求的SSLError实例

ssl.SSLError继承自OSError,它的初始化逻辑决定了实例的字符串格式,以下几种方法可以构造出能触发你异常判断的Mock实例:

方法1:模拟真实SSL错误的结构构造

真实的目标错误格式是[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled,可以通过传入错误码和对应描述元组来构造:

import ssl

# 对应SSL错误类型的代码
err_code = ssl.SSL_ERROR_SSL
# 元组第一个元素是错误标识,第二个是描述
err_details = ("UNSAFE_LEGACY_RENEGOTIATION_DISABLED", "unsafe legacy renegotiation disabled")
mock_err = ssl.SSLError(err_code, err_details)

print(str(mock_err))
# 输出:[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled

方法2:直接传入完整错误字符串

如果只需要让实例的字符串包含目标标识,也可以直接把完整错误信息传入构造函数:

import ssl

mock_err = ssl.SSLError("[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled")

print(str(mock_err))
# 输出:[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled

方法3:用unittest.mock模拟(适合单元测试场景)

在单元测试中,可以直接Mock实例的__str__方法,让它返回指定内容:

from unittest.mock import Mock
import ssl

mock_err = Mock(spec=ssl.SSLError)
mock_err.__str__.return_value = "[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled"

print(str(mock_err))
# 输出:[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled

用以上任意一种方式构造的实例,都能正常触发你异常处理代码中"UNSAFE_LEGACY_RENEGOTIATION_DISABLED" in str(ssl_err)的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:49