2016-12-23 19 views
0

を使用してexceptステートメントの例外インスタンスを取得できます。しかし、tryの後のelseステートメントで簡単に同じことをする方法はないようです。より明確にするには、以下のコードを参照してください。Python - try-except-elseで例外を捕捉する簡単な方法

try: 
    raise Exception('Foo') 
except ValueError as valueError: 
    print(valueError) 
    print('I can capture the exception instance with "as" keyword') 
else: # Cannot use "as" here 
    print('Some exception other than ValueError') 
    print('How can I capture the exception in order to, e.g. print its message?') 

+1

は、他のすべてをキャッチし、あなただけのキャッチしません'例外'基本クラス?しかし、すべてをキャッチするのは一般に貧弱な習慣です。 – Carcigenicate

+4

メインブロックにNO例外がスローされた場合、 'else'が実行されます。あなたは望むものを達成するために複数の 'except'ブロックを使うことができます。特に '例外を除いて:'は、一般的に悪い習慣です。 –

+0

@YaroslavAdminありがとう!私はtry-except-elseがどのように動作するのか完全に理解していませんでした。ここで 'else'ステートメントを使用する理由はかなり微妙です。 – lyang

答えて

4
try: 
    raise Exception('Foo') 
except ValueError as valueError: 
    print(valueError) 
    print('I can capture the exception instance with "as" keyword') 
except Exception as e: 
    print(e) 
    print('Some exception other than ValueError') 
else: 
    print('no exception raised') 
+0

ちょうど好奇心から@jcasner、何がダブルログですか?あなたが準備しているよりも多くのエラーをキャッチしていることを意味しますか? –

+0

それは私が正しく考えていなかった - 私は実際には意味がないので私は私のコメントを削除するつもりです。 – jcasner

4

使用し、複数のexcept条項:このような

次のいずれかの

try: 
    f = open('myfile.txt') 
    s = f.readline() 
    i = int(s.strip()) 
except OSError as err: 
    print("OS error: {0}".format(err)) 
except ValueError: 
    print("Could not convert data to an integer.") 
except: 
    print("Unexpected error:", sys.exc_info()[0]) 
    raise 

かのクラブの例外一緒:

except (RuntimeError, TypeError, NameError): 
    pass 
関連する問題