我正在与电子设备进行串行通信,响应消息的结尾由回车(\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
,并在那里打印消息的其余部分
我不喜欢这种行为,因为它会覆盖我的异常消息,而不是打印原始消息
由于您正在定义自定义异常,因此可以重写
__str__()
方法,使其返回所需的repr
:self.args[0]
只选择元组的第一个元素,否则它将返回具有一个或多个参数的元组的repr
相关问题 更多 >
编程相关推荐