【发布时间】:2019-12-18 20:36:16
【问题描述】:
根据 os 模块的官方文档,IsADirectoryError 是在目录上使用 os.remove() 时引发的异常。
我希望下面的代码可以创建和删除一个目录,但它会出错:
>>> os.mkdir(r'C:\test')
>>> try:
... os.remove(r'C:\test')
... except IsADirectoryError:
... os.rmdir(r'C:\test')
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
PermissionError: [WinError 5] Access is denied: 'C:\\test'
为什么我收到权限错误而不是预期的 IsADirectoryError?
编辑:只需运行 os.rmdir(r'C:\test') 即可,因此我的脚本确实有权删除该文件夹。
编辑:有人建议我捕获 WinError 5 并尝试将其作为文件夹处理,如果这不起作用,则继续处理 WinError 5 的其他错误可能性。如下所示,这可以快速创建丑陋的代码。有没有办法区分引发 WinError 5 异常的不同错误?如果没有,是否有更简洁的方法来处理所有可能的情况?
try:
os.remove(r'C:\test')
except WindowsError as e:
if e.winerror==5: #maybe it's a directory
try:
os.rmdir(r'C:\test')
except WindowsError as f:
if f.winerror==5: #maybe it's read-only
try:
os.chmod(r'C:\test', 0o777)
except WindowsError as g:
if f.winerror==5: #maybe we don't have access
...
【问题讨论】:
-
因为您的脚本无权获取
C:\test路径的统计信息 -
@AzatIbrakov 如果它创建了文件夹,为什么它没有访问权限?如何授予它访问权限?
-
我猜是因为它直接在
C:\下。尝试另一条路径。就像您的用户文件夹一样。PermissionError在被检查为目录之前就被提出了 -
@Tomerikoo 我在为 C:\Users\myusername\test 执行此操作时得到相同的结果
标签: python error-handling operating-system