首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中将WindowsError转换为OSError

在python中将WindowsError转换为OSError
EN

Stack Overflow用户
提问于 2016-08-26 12:52:10
回答 1查看 630关注 0票数 0

在我维护的(遗留)代码中,人们正在使用WindowsError。我可以继续用OSError替换所有事件,但是遗憾的是,winerror属性被使用了,只在三种情况下--即123:

代码语言:javascript
复制
try:
    mtime = int(os.path.getmtime(self._s))
except WindowsError, werr:
        if werr.winerror != 123: raise
        deprint(u'Unable to determine modified time of %s - probably a unicode error' % self._s)

740:

代码语言:javascript
复制
try:
    popen = subprocess.Popen(args, close_fds=bolt.close_fds)
    if wait: popen.wait()
except UnicodeError:
    self._showUnicodeError()
except WindowsError as werr:
    if werr.winerror != 740:
        self.ShowError(werr)

和32:

代码语言:javascript
复制
try:
    patchName.untemp() # calls shutil.move() and os.remove()
except WindowsError, werr:
    while werr.winerror == 32 and self._retry(patchName.temp.s,
                                              patchName.s):
        try:
            patchName.untemp()
        except WindowsError, werr:
            continue
        break
    else:
        raise

我该如何将这些代码翻译成OSError

我在python2.7中,所以我不能使用佩普-3151中引入的很好的异常

下面是一个关于将winerror映射到errno模块的讨论

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-05 20:39:25

winerror和errno属性有不同的值--在良好的代码实践中,我没有使用神奇的数字,而是使用了errno模块中的常量。所以32:

代码语言:javascript
复制
-            except WindowsError as werr:
-                if werr.winerror == 32:
+            except OSError as werr:
+                if werr.errno == errno.EACCES: # 13

123 (另请参阅):

代码语言:javascript
复制
with open('file', 'w'): pass
newFileName = 'illegal characters: /\\:*?"<>|'
try:
    os.rename('file', newFileName)
except OSError as e: # winerror = 123, errno = 22
    print e

所以errno.EINVAL

740是在windows特定的代码中,所以我单独离开了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39166817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档