23

C には perror と errno があり、最後に発生したエラーを出力して保存します。これは、呼び出しが失敗した理由をユーザーに提示するために fopen() の引数として失敗したすべてのファイルを fstat() する必要がないため、ファイル io を実行するときに便利です。

PythonでIOError例外を適切に処理するときにerrnoを取得する適切な方法は何だろうと思っていましたか?

[1]: fp = open("/notthere")
-------------------------------------------------- -------------------------
IOError トレースバック (最新の呼び出しが最後)

/home/mugen/ ()内

IOError: [Errno 2] そのようなファイルまたはディレクトリはありません: '/notthere'


[2]: fp = open("test/testfile")
-------------------------------------------------- -------------------------
IOError トレースバック (最新の呼び出しが最後)

/home/mugen/ ()内

IOError: [Errno 13] 許可が拒否されました: 'test/testfile'


[5]: 試してください:
   ...: fp = オープン("そこに")
   ...: IOError を除く:
   ...: print "これは何らかの理由で失敗しました..."
   ...:     
   ...:     
これがなぜか失敗…
4

4 に答える 4

36

例外には次のerrno属性があります。

try:
    fp = open("nothere")
except IOError as e:
    print(e.errno)
    print(e)
于 2009-07-15T23:18:53.923 に答える
29

方法は次のとおりです。一部のユーティリティについては、errnoモジュールと関数も参照してください。os.strerror

import os, errno

try:
    f = open('asdfasdf', 'r')
except IOError as ioex:
    print 'errno:', ioex.errno
    print 'err code:', errno.errorcode[ioex.errno]
    print 'err message:', os.strerror(ioex.errno)

IOError 属性の詳細については、基本クラスの EnvironmentError を参照してください。

于 2009-07-15T23:19:32.940 に答える
21
try:
    fp = open("nothere")
except IOError as err:
    print err.errno 
    print err.strerror
于 2009-07-15T23:20:51.423 に答える