昨日は子供が怪我をしてしまい、
午後8時くらいから看病をしながら、
一緒に寝てました。
本当は寝付いたら、
起きて勉強したりするはずだったのに
起きたら朝6時だったorz
ビックリ!ってか起こしてよ。。。
そんなこんなで、
Pythonを勉強中vol.5
今日は
「raise」
をやってみる。
こいつの役割は、
「初めてのPython」を見てみると
プログラムの中で例外を故意に発生させる場合に使用する
ってな事が書いてある。
書き方が下記の通り
・ raise name
・ raise name, data
・ raise
実際にやってみる。
>>> try:
… raise IndexError, ‘hoge’
… except IndexError:
… print ‘index error’
… raise
…
index error
Traceback (most recent call last):
File “”, line 2, in
IndexError: hoge
raiseで何も指定しない場合は、
直近(この場合では、raise IndexError, ‘hoge’)の例外を
発生させる事が出来る。
よってexceptブロックで捕まえているが、
そこの例外を処理していないのが解った。
その場合、raise IndexError, ‘hoge’で
指定したデータ「hoge」が渡されているのも解った。
なるほどね。
「raise」以外にも「assert」も例外を故意に発生させるらしいので、一緒にやってみた。
書き方は下記の通り
assert test, data
これは、「raise」を使用した場合の下記と同じである。
if __debug__:
if not test:
raise AssertionError,
ん?
これはつまり if で test がFalseの場合にAssertionErrorって事かな?
なるほど。
こんな感じ
>>> x = 2
>>> assert x < 1, ‘x must be negative’
Traceback (most recent call last):
File “”, line 1, in
AssertionError: x must be negative
AssertionError: x must be negativeになってる。
ほぉ〜。
つまりxは2であり、1よりも大きいため例外処理の対象となっている。
assertは、
プログラマが自ら定めた条件が満たされているかを確かめるためのもの
らしいっす。
まぁ〜確かにタイプミスとかは自動的に検出されるから、
別にassertで例外処理をする必要もないもんね。
初めてのPython 第2版 オライリージャパン(2004-11)
新品価格:¥ 5,040 中古価格:¥ 4,100 ASIN:4873112109 |
assertは昔からあるデバッグ手法。
例外処理とはちょっと違うな。
主にコーディングミスを発見するために使うね。
ファイルを処理する関数なのに引数がNULLとかねーだろ、とか、
user_typeは1~3のどれかだからswitch文でdefaultにはこねーだろ、って感じで。
そんでアサーションが発生したらその手前でミスってるってわかる。
>paselaさん
>assertは昔からあるデバッグ手法。
>例外処理とはちょっと違うな。
そうっすね。
初めてのPythonにも記事に書いたとおり、
「プログラマが自ら定めた条件が満たされているかを確かめるためのもの」
って書いてあるので、
デバックなんかに使えそうですね。