2017-07-28 7 views
0

Pythonでは、特定のPOSIXエラー条件には別の例外タイプがありません。つまり、OSError例外オブジェクト内の属性で区別されます。特定の例外(ENOENTなど)を別のものと区別して扱います。

ファイル操作(SFTPで存在しないファイルを削除する)を実行していて、ENOENTを無視したいが、他のエラーや例外を処理しているとします。それは次のようによりエレガントに行うことが可能ですか?

try: 
    action() 
except e as OSError: 
    if e.errno == errno.ENOENT: 
     pass 
    else: 
     sophisticated_error_handling(e) 
except e: 
    sophisticated_error_handling(e) 

私はこの方法を嫌うのは、繰り返しが必要なためです。

注:X-Yの問題はありません。 「アクション」はライブラリ関数であり、ENOENTを無視するように指示することはできません。

+0

if文ですべてのエラーをキャッチし、型をチェックしますか?どのように正確にはわからないが、擬似コード: 'try:somecode except e:e.type == OSErrorとe.errno == errno.ENOENT:pass/else:sophisticated()' – TessellatingHeckler

+0

例:https://repl.it/JnUQ/0(https://stackoverflow.com/a/9824050/478656の警告) – TessellatingHeckler

答えて

-1

次の点を除いて、エラータイプを入力してください!

test = [1, 2, 3, 4, 5, 6, 'aasd'] 
for i in range(50): 
    try: 
     print(test[i]) 
except IndexError: 
    pass 
関連する問題