gpt4 book ai didi

Python:获取 WindowsError 而不是 IOError

转载 作者:太空狗 更新时间:2023-10-29 22:08:00 28 4
gpt4 key购买 nike

我正在尝试了解 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: [Error 183] Cannot create a file when that file already exists: 'My_New_Dir'

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

If the directory already exists, OSError is raised.

那么为什么抛出的是 Windows 错误,而不是 Python 异常?

最佳答案

WindowsErrorOSError 的子类。来自exceptions documentation :

Raised when a Windows-specific error occurs or when the error number does not correspond to an errno value. The winerror and strerror values are created from the return values of the GetLastError() and FormatMessage() functions from the Windows Platform API. The errno value maps the winerror value to corresponding errno.h values. This is a subclass of OSError.

然而,您正试图捕获 IOError不是 WindowsError 的父类;因此,它不足以捕获 OSErrorWindowsError

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

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

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

关于Python:获取 WindowsError 而不是 IOError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027508/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com