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

Python try/except无法捕获异常:串口切换逻辑失效求助

解决pyserial串口捕获异常失效的问题

核心问题分析

你遇到的问题是因为捕获的异常类型不对,或者try块没有包裹串口初始化的关键代码。pyserial在找不到指定串口时,抛出的是serial.SerialException而非通用的Exception,如果你的try/except没有明确捕获这个异常,就会导致异常直接输出到控制台,且不会执行切换串口的逻辑。

修复方案

1. 导入正确的异常类

首先确保从pyserial库中导入SerialException:

from serial import Serial, SerialException

2. 正确的异常捕获结构

将串口初始化代码完整包裹在try块内,依次尝试目标串口,示例代码如下:

from serial import Serial, SerialException

# 定义要尝试的串口列表
target_ports = ['/dev/cu.usbserial-10', '/dev/cu.usbserial-110']
serial_conn = None

for port in target_ports:
    try:
        # 尝试初始化串口
        serial_conn = Serial(port, baudrate=9600, timeout=1)
        print(f"已成功连接到串口: {port}")
        break  # 连接成功则跳出循环
    except SerialException as err:
        # 捕获串口连接失败的异常
        print(f"连接串口 {port} 失败: {str(err)}")
        continue

if not serial_conn:
    print("所有指定串口均无法连接")
else:
    # 这里写串口连接后的业务逻辑
    pass

关键注意事项

  • 必须确保Serial()的初始化语句完全在try块内部,否则异常无法被捕获。
  • 优先捕获SerialException而非通用Exception,这是pyserial专门用于串口错误的异常类,能精准覆盖找不到串口、权限不足等串口相关问题。
  • 如果你的代码中还有其他可能抛出异常的操作(比如读写串口),需要单独处理,但当前问题仅针对串口初始化阶段的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:44:55