web-dev-qa-db-ja.com

IOErrorのerrnoを取得する方法?

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

PythonでIOError例外を適切に処理するときにerrnoを取得する適切な方法は何ですか?

 [1]内:fp = open( "/ notthere")
 -------------------------- ------------------------------------------------- 
 IOErrorトレースバック(最新の呼び出しが最後)
 
/home/mugen/in()
 
 IOError:[Errno 2]そのようなファイルがないか、ディレクトリ: '/notthere'


In [2]:fp = open( "test/testfile")
 --------- -------------------------------------------------- ---------------- 
 IOErrorトレースバック(最新の呼び出しは最後)
 
/home/mugen/in()
 
 IOError:[Errno 13]権限が拒否されました: 'test/testfile' 
 
 
 In [5]:try:
 .. 。:fp = open( "nothere")
 ...:IOErrorを除く:
 ...:印刷「これは何らかの理由で失敗しました...」
 ... :
 ...:
これは何らかの理由で失敗しました... 
21
jr0d

例外にはerrno属性があります:

try:
    fp = open("nothere")
except IOError as e:
    print(e.errno)
    print(e)
33
stefanw

方法は次のとおりです。一部のユーティリティについては、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を参照してください。

28
ars
try:
    fp = open("nothere")
except IOError as err:
    print err.errno 
    print err.strerror
21
Pavel Minaev

同じ「except」句で異なる例外をテストすることもできます。

try:
    serial_port.open()
except (AttributeError, SerialException) as e:
    print('cannot open serial port: {}'.format(e))
2
Oppy