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

标签 python exception errno

我正在编写一个小型 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,它有成员messagefilenameerrnostrerror。按照我的方法,只使用了message。好像我在这里遗漏了什么。

引发IOError 异常的最佳做法是什么,以便它与其他错误(例如磁盘已满找不到文件 等等?

最佳答案

您知道 filename,这是您正在读取并计算 CRC 的文件。对于 errnostrerror,我会从 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/

相关文章:

python - 如何提取所有以 .000 结尾的值并打印它们?

c# - 如何查找运行 WPF 应用程序时抛出的异常?

c - errno 变量的默认值

c - VxWorks PPC 中 errno 始终返回零

python - 如何使用 aiohttp 检查 SSL 证书到期日期?

python - 对集合中的模型字段进行排序

python - 在python中,可以使用缓冲区遍历大型文本文件并同时获得正确的文件位置吗?

c++ - std::rethrow_exception(nullptr) 未定义行为或 bad_exception?

python - 为什么 fpectl — 浮点异常控制如此危险?