python - Python引发异常,其中消息具有回车\ r控制字符
问题描述
我正在与电子设备进行串行通信,并且响应消息的结尾由回车符 ( \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
您想要的:
class SerError(Exception):
"""Serial communications error."""
def __str__(self):
return repr(self.args[0])
仅选择元组的self.args[0]
第一个元素,否则它将返回repr
具有一个或多个参数的元组的 。
推荐阅读
- flutter - 颤振中从后台截取屏幕截图的权限列表
- android - Google Drive API 不可用
- linux - 上传完成后出现nginx文件大小太大的消息?
- node.js - node.js 可以处理 1k 的 sql 记录操作吗?
- typescript - 在 TypeScript 中为 propName 使用泛型
- android - 将 Circular ImageViews 连续放置在另一个上
- angular - Angular Google Map 嵌入修复了缩放时隐藏位置标记
- here-api - 服务停止使用 HERE REST API - 免费增值计划
- android - 如何在飞镖中组合循环结果
- wordpress - 如何在购物车页面中添加/更新自定义购物车商品数据