我正在编写一个小型 Python 接口(interface),用于通过 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
异常的最佳做法是什么,以便它与其他错误(例如磁盘已满 或找不到文件 等等?
最佳答案
您知道 filename
,这是您正在读取并计算 CRC 的文件。对于 errno
和 strerror
,我会从 libc
中定义的错误列表中选择。这是大多数 IOErrors
的来源,因此让我们保留此实现细节以保持一致性。选择哪些值有些随意(并不完全独立于操作系统),我会尝试传达我的问题的一般含义而不是太具体。
您可以采用其中之一(注释将是 strerror
):
EIO 5 /* I/O error */
EINVAL 22 /* Invalid argument */
对于这种“假”libc 错误过于具体可能会使人们在错误的轨道上调试问题。
顺便说一句,我咨询了this list对于现有的errno
关于python - 在 Python 中引发 IOError 异常的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425548/