2011-01-13 10 views
5

私は次のコードを持っている:それはOSErrorのNUMを満たしていない限り、OSErrorのファイル名属性は使用できませんか?

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

をそれは素晴らしい実行されます。 123(The file name, directory name, or volume label syntax is incorrect)。その後、私は、コード行以外で次のエラーを取得:

ValueError: need more than 2 values to unpack 

それはfilename属性を使用していないことによって解決されます。しかし、私の要求は私がこの属性を使用しないようにしてくれません。

別の方法がありますか?

答えて

24

Exceptionオブジェクトの属性をas句に渡しているこの種の例外処理は見ていません。

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

OSErrorには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 
+9

"この種の例外処理は見られませんでした。" =あなたが間違っていると言っていることは最高の方法です。 – marr75

+0

ありがとうございます。出来た! – Alex58

関連する問題