【发布时间】:2014-03-15 15:12:54
【问题描述】:
我正在编写一个小型 Python 接口,用于通过 sysfs 从 DS18B20 传感器读取温度。除了温度之外,还可以读取 CRC 和的状态。为了触发 CRC 错误,我决定使用IOError:
sn = "28-000005589697" # sensor serial number
# file containing information of temperature and if CRC is valid:
fname = "sys/bus/w1/devices/" + sn + "/w1_slave"
with open(fname, 'f') as f:
...
raise IOError("Invalid CRC in {}!".format(sn))
据我了解IOError,它有成员message、filename、errno 和strerror。通过我的方法,只使用message。好像我在这里遗漏了什么。
引发IOError 异常的最佳做法是什么,以便它与磁盘已满或找不到文件等其他错误很好地融合在一起?
【问题讨论】:
-
您不应该使用
IOError,因为这不是 I/O 问题(您可以读取数据),而是完整性问题(您读取的内容不正确或损坏)。改为定义CRCError或IntegrityError或其他。 -
@Stefano,这可能是最直接的解决方案。下一个问题是,从
BaseException或EnvironmentError派生IntegrityError是否有意义,这由Python 系统之外可能发生的异常的基类 描述。我知道这有点哲学,但我已经有几个硬件项目,我最终得到了一个非常混乱的错误层次结构。