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
相关产品推荐
相关产品推荐

