在Python中引发IOError异常的最佳实践
我正在写一个小的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
异常,使它能和其他错误(比如磁盘已满或文件未找到等)很好地结合在一起呢?
1 个回答
4
你知道filename
吧,它就是你正在读取并计算CRC的那个文件。至于errno
和strerror
,我会从libc
里定义的错误列表中选择。这是大多数IOErrors
的来源,所以我们保持这个实现细节的一致性。选择哪些值有点随意(而且并不是完全和操作系统无关),我会尽量传达我问题的一般含义,而不去过于具体。
你可以选择这些中的一个(注释会是strerror
):
EIO 5 /* I/O error */
EINVAL 22 /* Invalid argument */
如果对这种“假”的libc错误过于具体,可能会让人调试问题时走上错误的道路。
顺便说一下,我参考了这个列表来查找现有的errno
。