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

如何返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:42:15