我正在尝试了解Windows 8上的Python 2.7.6的异常。

这是我正在测试的代码,旨在在My_New_Dir上创建一个新目录。如果目录已经存在,我想删除整个目录及其内容,然后创建一个新目录。

import os

dir = 'My_New_Dir'
try:
    os.mkdir(dir)
except IOError as e:
    print 'exception thrown'
    shutil.rmtree(dir)
    os.mkdir(dir)

问题是,永远不会抛出异常。如果该目录尚不存在,则代码可以正常运行,但是如果该目录确实存在,则出现错误:



但是根据os.mkdir()的Python文档,



那么,为什么会引发Windows错误而不是Python异常呢?

最佳答案

WindowsErrorOSError的子类。从exceptions documentation:



但是,您正在 try catch IOError,这不是WindowsError的父类;结果,捕获OSErrorWindowsError都不够。

更改您的代码以在此处使用正确的异常:

try:
    os.mkdir(dir)
except OSError as e:

或者使用WindowsError;这会将您的代码绑定(bind)到Windows平台。

10-04 12:34