如何返回SerialException的错误信息?串口编程技术问询
解决串口占用时捕获SerialException错误信息的问题
我来帮你修正代码并实现捕获错误信息的功能,你的代码里有几个小问题需要调整,我一步一步说明:
首先,不要用open作为函数名——这是Python的内置函数,覆盖它可能会导致意外问题,我们换成open_serial_port这类更清晰的名字。
然后,要获取异常的具体信息,你需要在except语句后加上as <变量名>(比如as e),这样就能拿到异常对象,通过str(e)就能获取到你想要的完整错误描述(比如你提到的"Access is denied could not open port 'COM38': PermissionError(13, 'Access is denied.', None, 5)")。
下面是修正后的完整代码:
import serial from serial import SerialException def open_serial_port(): try: # 可以把串口对象保存下来,方便后续读写操作;不需要的话也可以直接创建 ser = serial.Serial('COM38', 9600) return (True, "串口打开成功") except SerialException as e: # 用元组返回状态+信息,方便区分成功/失败场景;也可以直接返回错误字符串 return (False, str(e)) # 调用函数并打印结果 success, msg = open_serial_port() print(msg)
关键细节说明:
str(e)会把SerialException对象转换成人类可读的完整错误字符串,包含端口号、错误类型和具体原因,完全符合你想要的输出格式。- 我用元组返回
(状态, 信息)的形式,能让你清晰区分串口是否打开成功;如果只需要返回错误信息,也可以简化成:成功时return "串口打开成功",异常时return str(e)。 - 如果你需要在捕获异常后重新抛出异常(而不是返回信息),可以把
return换成raise e,这样会把错误向上传递,但根据你的需求,返回错误信息更合适。
测试时,当COM38被占用,你会看到预期的输出:
Access is denied could not open port 'COM38': PermissionError(13, 'Access is denied.', None, 5)
内容的提问来源于stack exchange,提问作者IOSBET
相关产品推荐
相关产品推荐

