pythonの5つの異常処理メカニズム

2547 ワード

変換元:
http://www.jb51.net/article/54638.htm
この文章は主にpythonの中の5種類の異常な処理のメカニズムを紹介して、本文はLearn Pythonの1冊の読書のノートで、必要な友达は参考にすることができます
数年前からプログラミングを学び、現在までプログラム中の異常処理に恐怖と反発を抱いてきた.なぜなら、知らないからだ.今回pythonを攻めて、まず自分が最も恐れていることと最もよく知らないことをいくつかの内容を列挙して、中には「異常処理」という項目があります.
「Dive into Python」では異常処理を専門に紹介していませんが、例で使ったときに少し説明しました.今日は『Learn Python』をダウンロードして、直接異常処理に入ります.この部分には4章があり,第1章では異常処理の一般的な使用方法を説明し,後の章ではそのメカニズムを深く議論する.私は今第1章だけを見て、先に使うことをマスターして、後で必要な時に更に拡張して読みます.
pythonは主に5つの異常メカニズムをサポートし、一つ一つ列挙している.
デフォルトの例外プロセッサ
 
    
s = 'Hello girl!'
print s[100]
print 'continue'

異常を予防していない場合、プログラム実行中に異常が発生すると、プログラムが中断され、pythonデフォルトの異常プロセッサが呼び出され、端末に異常情報が出力されます.この場合、3行目のコードは実行されません.
try…except
 
    
s = 'Hello girl!'
try:
 print s[100]
except IndexError:
 print 'error...'
print 'continue'

プログラムが2文目に実行されるとtry文が見つかり、try文ブロックに入って実行され、異常が発生し、try文層に戻り、後ろにexcept文があるかどうかを探します.EXcept文が見つかったら、このカスタム例外プロセッサが呼び出されます.Exceptで異常処理が完了すると、プログラムは続行されます.この場合、最後の2つのprint文が実行されます.
Exceptの後には、任意のタイプの例外をキャプチャすることを示す空もあります.
try…finally
 
    
s = 'Hello girl!'
try:
 print s[100]
finally:
 print 'error...'
print 'continue'

finally文は、例外が発生するかどうかにかかわらず、finallyの文が実行されることを示します.しかし、exceptプロセッサがないためfinally実行が完了するとプログラムが中断する.この場合、2番目のprintが実行され、1番目まで実行されません.try文に異常がない場合、3つのprintが実行されます.
assert
 
    
assert False,'error...'
print 'continue'

この文は、まずassertの後に続く文がTrueかFalseかを判断し、Trueであればprintを実行し続け、Falseであればプログラムを中断し、デフォルトの例外プロセッサを呼び出し、assert文のカンマの後のプロンプト情報を出力します.この例の場合、プログラムは中断され、errorがプロンプトされ、後のprintは実行されません.
with…as
 
    
with open('nothing.txt','r') as f:
 f.read()
 print 2/0
print 'continue'

我々は,通常,類似ファイルのストリームオブジェクトを使用する場合,使用が完了するとcloseメソッドを呼び出して閉じるのが面倒である.ここでwith...as文は、openがファイルを開いた後に返されるファイルストリームオブジェクトをfに割り当て、with文ブロックで使用するのに非常に便利な代替方法を提供します.with文ブロックが完了すると、非表示に自動的にファイルが閉じます.
with文または文ブロックに例外が発生した場合、デフォルトの例外プロセッサ処理が呼び出されますが、ファイルは正常に閉じます.
この場合、異常が投げ出され、最後のprintは実行されません.
本では、上記の以外にもtry.except..finally.elseなど、カスタム例外クラスなど、役に立つ追加情報がたくさん紹介されています.ここではリストしません.詳細はこの本の紹介を参考にすることができます.