Python引发异常,其中消息包含回车符\r控制字符

2024-05-31 23:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在与电子设备进行串行通信,响应消息的结尾由回车(\r)指示。如果响应有误,我将引发一个自定义异常。我希望我的异常消息显示原始响应,其中可能包括回车

我注意到回车有点搞砸了Python异常的打印/表示

有没有办法让Python的异常使用类似repr的东西


潜在解决方案

我可以创建一个自定义异常类并重写某些行为,以\r替换为"CR",但我不确定是否有更简单的方法

我也不确定该使用哪种dunder方法,也不确定在哪里找到该使用哪种dunder方法


我所看到的

输入:

class SerError(Exception):
    """Serial communications error."""


some_msg = f"some_serial\rmessage."
print(f"some_msg = {some_msg}.\nrepr(some_msg) = {repr(some_msg)}.")
raise SerError(some_msg)

输出:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
message..SerError: some_serial

您可以看到Python通过将光标重置到行的开头来解释控制字符\r,并在那里打印消息的其余部分

我不喜欢这种行为,因为它会覆盖我的异常消息,而不是打印原始消息


Tags: 方法消息结尾serialexceptionmsgsome解决方案
1条回答
网友
1楼 · 发布于 2024-05-31 23:37:01

由于您正在定义自定义异常,因此可以重写__str__()方法,使其返回所需的repr

class SerError(Exception):
    """Serial communications error."""
    def __str__(self):
        return repr(self.args[0])

self.args[0]只选择元组的第一个元素,否则它将返回具有一个或多个参数的元组的repr

相关问题 更多 >