4

同じ「タイプ」を持つさまざまな例外を処理する方法を知りたいです。ディレクトリを作成するためにいくつかのコードを使用しようとしています:

os.mkdir(target_dir_name)

また、ディレクトリが既に存在する場合など、さまざまな理由でこれが失敗する可能性があることもわかっています。

OSError: [Errno 17] File exists: 

または、新しいディレクトリを作成する権限がない場合:

OSError: [Errno 13] Permission denied:

エラー メッセージを特定の失敗の原因に合わせて調整したいので、次のコードを思いつきました。

try:
  os.mkdir(target_dir_name)
except OSError as e:
  if e.errno == 17:
    print "Warning: Directory %s already exists, executing a rebuild" % (target_dir_name)
  elif e.errno == 13:
    sys.exit("Error: Directory "+target_dir_name+" cannot be created incorrect permissions")

しかし、私はもう少しハードコードされていないことをしたいと思っています。サブエラーチェックを更新できる Pythonic の方法はありますか?

4

1 に答える 1

1

私が見つけた唯一の情報...これが私の最良の答えだと思います:

errno モジュールを使用すると、少なくとも現在のコードを次のように書き換えることができます。

import errno
#...
except OSError as e:
  if e.errno == errno.EEXIST:
    print "Warning: Directory %s already exists, e..."
  elif e.errno == errno.EACCESS:
    sys.exit("Error: Directory "+target_dir_name+"..."

私がpython 3.2にアップグレードすると、より良いものがあります:

except FileExistsError:
  print ("Warning: Directory %s already exists, e...")
except PermissionError:
  sys.exit("Error: Directory "+target_dir_name+"...")

私は何か空想を使用してsys.version_info.majorminorそれが少なくとも3.2同様であることを確認することができるようです.

うまくいけば、もっと良いものが出てくるでしょう...

于 2013-07-10T19:37:36.890 に答える