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

为何except Exception无法捕获ssl.SSLError异常?

为什么except Exception无法捕获ssl.SSLError?

首先明确:ssl.SSLError是OSError的子类,而OSError属于Exception的派生类,理论上except Exception完全可以捕获它。如果没捕获到,大概率是以下几种场景导致:

  • 异常不在try代码块的执行范围内
    检查代码缩进是否正确,若doSomething2()的缩进未与doSomething()对齐,导致它不在try块的覆盖范围内,抛出的异常自然不会被捕获。比如错误缩进示例:

    try:
        doSomething()
    doSomething2() # 此函数不在try块内,异常无法被捕获
    except Exception:
        print("expection thrown, test should pass!")
    
  • 异常在其他线程/子进程中抛出
    如果doSomething2()内部启动了独立线程或子进程,且异常是在这些执行单元中抛出的,当前主线程的try-except无法跨线程/进程捕获异常。比如线程内抛出异常的情况:

    import threading
    def doSomething2():
        threading.Thread(target=lambda: raise ssl.SSLError()).start()
    
  • 异常被内部逻辑转换为BaseException子类
    若doSomething2()内部有自己的异常处理逻辑,将SSLError转换为SystemExit、KeyboardInterrupt这类BaseException的子类(这类异常不属于Exception范畴),那么except Exception就无法捕获。示例:

    def doSomething2():
        try:
            # 触发SSLError的操作
        except ssl.SSLError:
            raise SystemExit("SSL连接失败")
    
  • 异步代码未正确使用await
    如果你的代码是异步场景,doSomething2()是协程函数但未用await调用,协程内的异常不会被当前try-except捕获。错误写法示例:

    async def main():
        try:
            doSomething()
            doSomething2() # 协程未await,异常无法被捕获
        except Exception:
            print("expection thrown, test should pass!")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:55