python放出異常

2233 ワード

Pythonが無効なコードを実行しようとすると、例外が放出されます.3章では、try文とexcept文を使用してPythonの例外を処理する方法を見ました.これにより、プログラムは予想された例外から回復できます.しかし、コードに自分の異常を投げ出すこともできます.異常を投げ出すと「この関数のコードの実行を停止し、プログラムの実行をexcept文に転送する」ということになります.例外を放出するにはraise文を使用します.コードでは、raise文には、•raiseキーワード、•Exception関数の呼び出しException関数に渡される文字列には、有用なエラー情報が含まれています.たとえば、インタラクティブ環境で次のコードを入力します.
>>> raise Exception('This is the error message.')
Traceback (most recent call last):
    File "", line 1, in 
        raise Exception('This is the error message.')
Exception: This is the error message.

try文とexcept文が例外を投げ出したraise文を上書きしていないと、プログラムがクラッシュし、例外のエラー情報が表示されます.通常、関数を呼び出すコードは、関数自体ではなく、例外をどのように処理するかを知っています.したがって、raise文は関数の中にあり、try文とexcept文は関数を呼び出すコードの中にあることがよく見られます.たとえば、新しいファイルエディタウィンドウを開き、次のコードを入力boxPrintとして保存します.py:
def boxPrint(symbol, width, height):
	if len(symbol) != 1:
		raise Exception('Symbol must be a single character string.')
	if width <= 2:
		raise Exception('Width must be greater than 2.')
	if height <= 2:
		raise Exception('Height must be greater than 2.')
	print(symbol * width)
	for i in range(height - 2):
		print(symbol + (' ' * (width - 2)) + symbol)
	print(symbol * width)

for sym, w, h in (('*', 4, 4), ('0', 20, 5), ('x', 1, 3), ('ZZ', 3, 3)):
	try:
		boxPrint(sym, w, h)
	except Exception as err:
		print('An exception happened: ' + str(err))

ここでは、文字、幅、高さを受け入れるboxPrint()関数を定義します.指定した幅と高さに従って、この文字で小さな箱の画像を作成します.この箱はスクリーンに印刷されます.この文字は1文字で、幅と高さは2より大きいと仮定します.if文を追加し,これらの条件が満たされなければ異常を投げ出す.後で、boxPrint()を異なるパラメータで呼び出すと、try/except文は無効なパラメータを処理します.このプログラムはexcept文のexcept Exception as err形式を使用しています.boxPrint()がExceptionオブジェクトを返すと、この文はerrという変数に保存されます.Exceptionオブジェクトはstr()に渡され、文字列に変換され、ユーザーに優しいエラー情報を得ることができます.boxPrintを実行します.py、出力は次のように見えます.
****
*  *
*  *
****
OOOOOOOOOOOOOOOOOOOO
O                  O
O                  O
O                  O
OOOOOOOOOOOOOOOOOOOO
An exception happened: Width must be greater than 2.
An exception happened: Symbol must be a single character string.

tryとexcept文を使用すると、プログラム全体をクラッシュさせるのではなく、エラーをより優雅に処理できます.