我正在编写一个小型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
异常的最佳做法是什么,因此它与其他错误(如磁盘已满或找不到文件等)混合在一起等?
答案 0 :(得分:4)
您知道filename
,它是您正在阅读的文件并计算CRC。对于errno
和strerror
,我会从libc
中定义的错误列表中进行选择。这是大多数IOErrors
的原因所在,所以让我们保持这个实现细节的一致性。要选择哪些值有些随意(并且不完全独立于操作系统),我尝试传达我的问题的一般含义而不是太具体。
你可以选择其中一个(评论为strerror
):
EIO 5 /* I/O error */
EINVAL 22 /* Invalid argument */
过于具体地使用这样的"假的" libc错误可能会让人们在错误的轨道上调试问题。
BTW我就现有errno