例外
プログラムに何らかの異常な条件が現れると、異常が発生します。たとえば、特定のファイルを読み込もうとしたときに、そのファイルが存在しない場合です。または、プログラムの実行中に誤って削除してしまいました。上記の状況は例外を使用して処理できます。 プログラムに無効なステートメントがある場合はどうなりますか? Python は、エラーを発生させて通知することで、このような状況を処理します。
' s ' s ' s 1. 例外の処理
out out out out to
' out through out out through using off through ‐to ‐ ‐‐ ‐‐ ‐ to handle例外
通常のステートメントを try ブロックに置き、エラー処理ステートメントを例外ブロックに置きます。
例外処理の例は次のとおりです:import sys try: s = raw_input('Enter something --> ') except EOFError: print '\nWhy did you do an EOF on me?' sys.exit() except: print '\nSome error/exception occurred.' print 'Done'出力:
Python コード
Enter something --> + Done
例外を発生させる方法の例は次のとおりです:
class ShortInputException(Exception): '''A user-defined exception class.''' def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = raw_input('Enter something --> ') if len(s) < 3: raise ShortInputException(len(s), 3) except EOFError: print '\nWhy did you do an EOF on me?' except ShortInputException, x: print 'ShortInputException: The input was of length %d, \ was expecting at least %d' % (x.length, x.atleast) else: print 'No exception was raised.'
出力:
Python コード
Enter something --> 2222 No exception was raised. Enter something --> 1 ShortInputException: The input was of length 1, was expecting at least 3
試してください...最後に
finallyの使用例は以下の通りです:
import time f = file('poem.txt') try: while True: line = f.readline() if len(line) == 0: break time.sleep(2) print line, finally: f.close() print 'Cleaning up...closed the file'
出力:
Pythonコード
Programming is fun When the work is done if you wanna make your work also fun: use Python! Cleaning up...closed the file
通常のファイル読み込み作業を行っていますが、あえてtime.sleepメソッドを使って一行出力する前に2秒間一時停止させています。この理由は、プログラムの実行速度を遅くするためです (Python はその性質上、通常非常に高速に実行されます)。プログラムの実行中に Ctrl-c を押すと、プログラムを中断/キャンセルできます。 KeyboardInterrupt 例外がトリガーされ、プログラムが終了することがわかります。ただし、プログラムが終了する前に、finally 句が引き続き実行され、ファイルが閉じられます。