«

»

1月 20

初めてのPython(第二版)を読んだ(5)

強制的に例外(とメッセージ)を送出する

>>> raise NameError('hogeeeeeee')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: hogeeeeeee
>>> raise EOFError('errorrrrrrr')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
EOFError: errorrrrrrr

ちなみに、本に載ってたコードだと動かなかった。バージョンが変わったからかな?
raise ‘hogeeee’みたいな。(ユーザ定義例外というか)

メッセージを指定しないとNoneになります。

組み込み例外リスト
http://www.python.jp/doc/2.4/lib/module-exceptions.html

elseは例外が発生しなかった場合に実行されます。 …外に書いちゃダメなんですか….

>>> def elsetest():
...     try:
...             print 'hogeeee'
...     except EOFError:
...             print 'hogeeee2'
...     else:
...             print 'hogeeeee3'
...
>>> elsetest()
hogeeee
hogeeeee3

except name,value:とすると、valueの変数にエラーの際に送出されるメッセージが代入されます。

>>> def getvalue():
...     try:
...             raise NameError('foooo')
...     except NameError,values:
...             print values
...
>>> getvalue()
foooo

except (name1,name2):みたいにもできます。

finally:は、エラーが発生してもしなくても実行されます。

>>> var1 = 5
>>> def finallytest():
...     try:
...             var2 = var1+'hogeee'
...     except:
...             print 'ERROR!!'
...     finally:
...             print 'Done statement.'
...
>>> finallytest()
ERROR!!
Done statement.
>>> var1 = 'ho'
>>> finallytest()
Done statement.

ほう、面白い

ちなみに、__debug__は、-OオプションをつけないとTrueが返されます。

assertステートメント
これは便利です。

>>> assert var1==5,'error!!'
>>> assert var1!=5,'error!!'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: error!!

左に指定した条件式でFalseなら例外を送出します。あら便利

クラス例外は飛ばします。

そろそろ終わりが近づいてきました(現在P511)。クラスは飛ばしてきましたが…w

Permanent link to this article: http://lga128.nekobaka.net/2012/01/haji_py_part5/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Time limit is exhausted. Please reload the CAPTCHA.