【发布时间】:2017-06-12 18:19:26
【问题描述】:
在处理尝试创建现有文件或尝试使用不存在的文件时发生的错误时,抛出的OSErrors 有一个子类(FileExistsError、FileNotFoundError)。当文件名太长时,我找不到特殊情况的子类。
确切的错误信息是:
OSError: [Errno 36] File name too long: 'filename'
我想捕捉文件名过长时发生的 OSError,但仅当文件名过长时。我确实不想捕捉其他可能发生的OSErrors。有没有办法做到这一点?
编辑:我知道我可以根据长度检查文件名,但最大文件名长度因操作系统和文件系统而异,而且我没有看到一个“干净”的解决方案方式。
【问题讨论】:
-
@NuclearPeon:不。那是特定于 Windows 的,那里的答案不能回答这个问题。我在问题中指定了这一点。
-
您可以尝试获取最大文件名路径,尽管没有确定的方法可以做到这一点。检查此链接:code.activestate.com/lists/python-list/210662 - 检查文件名的长度,如果太长则通知用户。否则,try/except 是您已经列出的最佳选择。
-
我专门询问了如何捕获确切的错误。由于竞争条件和最大文件名长度的不一致(如问题中所述),我不想事先检查长度。
-
我见过的缩小 OSError 范围的唯一方法是在抛出异常时检查第三个参数。请参阅此处的文档:docs.python.org/2/library/exceptions.html#exceptions.OSError - 相关信息:
For exceptions that involve a file system path (such as chdir() or unlink()), the exception instance will contain a third attribute, filename, which is the file name passed to the function.您可能不得不得出这样的结论,即 Python 没有确定的方式来做您想做的事。提交错误。
标签: python python-3.x filenames long-filenames