Python:获取WindowsError而不是IOError
我想在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)
事情是,这个例外永远不会抛出。 如果该目录尚不存在,代码工作正常,但如果目录确实存在,那么我得到错误:
WindowsError:[错误183]该文件已存在时无法创建文件:'My_New_Dir'
但根据os.mkdir()的Python文档,
如果该目录已经存在,则引发OSError。
那么为什么会抛出Windows错误,而不是Python异常呢?
WindowsError
是OSError
一个子OSError
。 从例外文件中:
当发生特定于Windows的错误或错误编号与errno
值不对应时引发。 winerror
和strerror
值是从Windows平台API的GetLastError()
和FormatMessage()
函数的返回值创建的。 errno
值将winerror
值映射到相应的errno.h
值。 这是OSError
一个子OSError
。
你正试图去捕获IOError
但它不是WindowsError
的父类; 因此它不足以捕获OSError
或WindowsError
。
改变你的代码在这里使用正确的异常:
try:
os.mkdir(dir)
except OSError as e:
或使用WindowsError
; 这会将您的代码绑定到Windows平台。
你误读了它。 它是“OSError”而不是“IOError”,WindowsError是您的特定工作操作系统的“OSError”的子类。
>>> issubclass(WindowsError, OSError)
True
此外,对于你的建议,这个API更好:
os.path.isdir(path):如果path是现有目录,则返回True。 这遵循符号链接,所以islink()和isdir()对于相同的路径可以为true。
if os.path.isdir(dir):
shutil.rmtree(dir)
os.mkdir(dir)
如果您在异常页面上搜索“WindowsError”,则会看到WindowsError
实际上是一个Python异常。 它是OSError
的子OSError
,所以文档仍然是正确的。 如果你改变
try:
os.mkdir(dir)
except OSError as e:
print 'exception thrown'
shutil.rmtree(dir)
os.mkdir(dir)
那么你会发现异常。
链接地址: http://www.djcxy.com/p/83741.html上一篇: Python: Getting a WindowsError instead of an IOError
下一篇: c++