在 python 中将 WindowsError 转换为 OSError
Converting WindowsError to OSError in python
在我维护的(遗留)代码中,人们正在使用 WindowsError
。我可以继续用 OSError
替换所有出现的地方,但是可惜 winerror
属性被使用了,很高兴只有在三种情况下 - 即 123:
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:
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:
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
?
我在 python 2.7,所以我不能使用 pep-3151
中引入的很好的异常
这里是 discussion 将 winerror 映射到 errno 模块
事实证明 winerror 和 errno 属性具有不同的值 - 在良好的代码实践中,我没有使用幻数,而是使用 errno 模块中的常量。所以 32:
- except WindowsError as werr:
- if werr.winerror == 32:
+ except OSError as werr:
+ if werr.errno == errno.EACCES: # 13
对于 123 (see also):
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 特定代码中,所以我一个人离开了。
在我维护的(遗留)代码中,人们正在使用 WindowsError
。我可以继续用 OSError
替换所有出现的地方,但是可惜 winerror
属性被使用了,很高兴只有在三种情况下 - 即 123:
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:
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:
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
?
我在 python 2.7,所以我不能使用 pep-3151
中引入的很好的异常这里是 discussion 将 winerror 映射到 errno 模块
事实证明 winerror 和 errno 属性具有不同的值 - 在良好的代码实践中,我没有使用幻数,而是使用 errno 模块中的常量。所以 32:
- except WindowsError as werr:
- if werr.winerror == 32:
+ except OSError as werr:
+ if werr.errno == errno.EACCES: # 13
对于 123 (see also):
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 特定代码中,所以我一个人离开了。