如何在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}")
说明
- Python中PermissionError和FileNotFoundError都是
OSError的直接子类,因此可以单独编写except子句精准捕获 - 需将更具体的异常放在前面,通用的
OSError放在最后,避免被提前兜底拦截 - 把
baudrate='115200'改为整数115200是pyserial的推荐写法,能规避不必要的类型转换问题
内容的提问来源于stack exchange,提问作者ronk
相关产品推荐
相关产品推荐

