在Python中引发IOError异常的最佳实践

时间:2014-03-15 15:12:54

标签: python exception errno

我正在编写一个小型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,它有成员messagefilenameerrnostrerror。通过我的方法,仅使用message。好像我在这里遗漏了一些东西。

引发IOError异常的最佳做法是什么,因此它与其他错误(如磁盘已满找不到文件等)混合在一起等?

1 个答案:

答案 0 :(得分:4)

您知道filename,它是您正在阅读的文件并计算CRC。对于errnostrerror,我会从libc中定义的错误列表中进行选择。这是大多数IOErrors的原因所在,所以让我们保持这个实现细节的一致性。要选择哪些值有些随意(并且不完全独立于操作系统),我尝试传达我的问题的一般含义而不是太具体。

你可以选择其中一个(评论为strerror):

EIO          5  /* I/O error */
EINVAL      22  /* Invalid argument */

过于具体地使用这样的"假的" libc错误可能会让人们在错误的轨道上调试问题。

BTW我就现有errno

咨询了this list