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

如何在Python 3.11中捕获特定类型的OSError异常

区分OSError子类的串口异常处理

在使用pyserial操作串口时,你会遇到两种不同的OSError子类异常:当端口被其他程序占用时触发PermissionError,当端口未连接时触发FileNotFoundError。可以通过独立的except子句分别捕获并处理这两种异常,无需统一用OSError兜底。

修改后的代码示例

import serial
import sys

print(sys.version)
try:
    serA = serial.Serial(
        port='com9',
        baudrate=115200,  # 建议用整数而非字符串,避免潜在类型转换问题
        parity='N',
        stopbits=1,
        bytesize=8,
        timeout=0.05
    )
except PermissionError:
    print("错误:串口com9被其他程序占用,无法访问")
except FileNotFoundError:
    print("错误:未找到串口com9,请检查设备连接")
except OSError as e:
    # 捕获其他未预料到的OSError子类异常
    print(f"其他串口错误:{e}")

说明

  1. Python中PermissionError和FileNotFoundError都是OSError的直接子类,因此可以单独编写except子句精准捕获
  2. 需将更具体的异常放在前面,通用的OSError放在最后,避免被提前兜底拦截
  3. 把baudrate='115200'改为整数115200是pyserial的推荐写法,能规避不必要的类型转换问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:38:15