Python 在消息有回车符的地方引发异常 return \r 控制字符
Python raising exception where message has carriage return \r control character
我正在与电子设备进行串行通信,响应消息的结尾由回车符 return (\r
) 指示。如果响应出现乱码,我会引发一个自定义异常。我希望我的异常消息显示原始响应,其中可能包含回车 return.
我注意到 returns 有点把 Python 的异常 printing/representation 弄乱了。
有没有办法让 Python 的异常使用类似 repr
的东西?
可能的解决方法
我可以创建一个自定义异常 class 并覆盖某些行为以将 \r
替换为 "CR"
,但我不确定是否有更简单的方法。
我也不确定使用哪种双打方法,也不确定在哪里可以找到使用哪种双打方法。
我看到了什么
输入:
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__()
方法以使其 return 您想要的 repr
:
class SerError(Exception):
"""Serial communications error."""
def __str__(self):
return repr(self.args[0])
self.args[0]
仅选择元组的第一个元素,否则它将 return 具有一个或多个参数的元组的 repr
。
我正在与电子设备进行串行通信,响应消息的结尾由回车符 return (\r
) 指示。如果响应出现乱码,我会引发一个自定义异常。我希望我的异常消息显示原始响应,其中可能包含回车 return.
我注意到 returns 有点把 Python 的异常 printing/representation 弄乱了。
有没有办法让 Python 的异常使用类似 repr
的东西?
可能的解决方法
我可以创建一个自定义异常 class 并覆盖某些行为以将 \r
替换为 "CR"
,但我不确定是否有更简单的方法。
我也不确定使用哪种双打方法,也不确定在哪里可以找到使用哪种双打方法。
我看到了什么
输入:
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__()
方法以使其 return 您想要的 repr
:
class SerError(Exception):
"""Serial communications error."""
def __str__(self):
return repr(self.args[0])
self.args[0]
仅选择元组的第一个元素,否则它将 return 具有一个或多个参数的元组的 repr
。