如何从“尝试写入只读文件系统”中找出(区分)源自“磁盘已满情况”的错误? 我不想填满我的高清来找出:) 我想要的是知道谁来捕获每个异常,这样我的代码可以在用户尝试写入 ReadOnly FS 时向用户说些什么,如果用户试图在已满的磁盘中写入文件,我的代码可以告诉用户另一条消息。
最佳答案
一旦捕获到 IOError
,例如使用 Python 2.* 中的 except IOError, e:
子句,您可以检查 e.errno
以准确找出它是哪种 I/O 错误(不幸的是一种在不同操作系统之间不一定完全可移植的方式)。
参见 errno Python 标准库中的模块;在 R/O 文件系统(在合理的操作系统上)上打开要写入的文件应该生成 errno.EPERM
、errno.EACCES
或更好的 errno.EROFS
("只读文件系统");如果文件系统是 R/W 但没有剩余空间,您应该得到 errno.ENOSPC
(“设备上没有剩余空间”)。但是您需要在您关心的操作系统上进行试验(用一个小的 USB key 填充它应该很容易;-)。
没有办法根据 errno 使用不同的 except
子句——这样的子句必须通过它们捕获的异常的 class 来区分,而不是通过异常实例的属性-- 所以你需要在单个 except IOError, e:
子句中进行 if/else 或其他类型的调度。
关于python - 在 Python 中对磁盘 I/O 错误进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115203/