0

(旧式の)コードでは、私は人々がWindowsErrorを使用していることを維持しています。私は先に行くと、OSErrorとのすべての出現を置き換えますがwinerror属性悲しいかな幸せにのみ3例では、使用されている可能性 - すなわち123:PythonのWindowsErrorからOSErrorへの変換

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: 
    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) 
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

で導入された素敵な例外を使用することはできません午前

のerrnoモジュール

答えて

0

にマッピングwinerrorにdiscussionでwinerrorて、errno属性の値が異なる判明 - 良いコードのプラクティスでは、私は魔法の数を使用せず、errnoモジュールの定数を使用しました。だから、32:123

-   except WindowsError as werr: 
-    if werr.winerror == 32: 
+   except OSError as werr: 
+    if werr.errno == errno.EACCES: # 13 

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固有のコードになっていたので、私は一人で放置されました。

関連する問題