7

次のコードがあります。

except(OSError) as (errno, strerror, filename):
print "OSError [%d]: %s at %s" % (errno, strerror, filename)

OSError num を満たさない限り、問題なく動作します。123 ( The file name, directory name, or volume label syntax is incorrect). 次に、except コード行で次のエラーが発生します。

ValueError: need more than 2 values to unpack

filename属性を使用しないことで解決します。ただし、私の要件により、この属性を使用しないことはできません。

別の方法はありますか?

4

1 に答える 1

31

Exception オブジェクトの属性を as 句に渡すこの種の例外処理は見たことがありません。

通常except ExceptionObject as e、オブジェクトの属性を処理するのと同じように、属性を処理します。

OSError には errno 属性が含まれます。これは errno からの数値エラー コードであり、strerror 属性は対応する文字列であり、ファイル システム パス (chdir() や unlink() など) を含む例外の場合、例外インスタンスには 3 番目の属性が含まれます。 , filename は、関数に渡されるファイル名です。

import os
try:
    os.chdir('somenonexistingdir')
except OSError as e:
    print e.errno
    print e.filename
    print e.strerror
于 2011-01-13T16:08:17.003 に答える