Ruby=>エラー処理と例外
2220 ワード
1.例外処理の書き方:
Rubyは例外も対象とした.rescueの後に変数名を指定し、例外オブジェクトを取得します.
変数名が指定されていなくても、例外オブジェクトは表9.1にリストされている変数に自動的に格納されますが、変数名を明確に指定するプログラムがわかりやすいです.
例外発生時に自動的に設定される変数
変数#ヘンスウ#
意味
$!
最後に発生した例外(オブジェクトなど)
$@
最後の例外が発生した場所に関する情報
また,例外オブジェクトに対して次のようなメソッドを呼び出し,例外に関する情報を取得する.
メソッド名
意味
class
例外カテゴリ
message
例外メッセージ
backtrace
例外の発生位置情報($@は!.backtraceに等しい)
2.善後処理
3.再実行
rescue文ブロックではretry文を使用してbegin文ブロックの動作を再実行できます.
例:
次の例では、オープンメソッドを10秒おきに再試行し、成功するとファイルの内容を返します.
しかし、ファイルが開かないままでは、無限のループになることに注意してください.
4.rescue式
5.例外処理補充
例外処理のbegin~end範囲がメソッド全体である場合、beginとendを省略し、rescueとensure文ブロックのみを書くことができる.
6.例外クラス
すべての例外はExceptionクラスのサブクラスです.
resure文ブロックに例外クラスが指定されていない場合、StandardErrorとそのサブクラスがスナップされます.
したがって,自分が種々の例外クラスを定義する場合,StandardErrorクラスを継承し,次に種々の例外クラスを継承するのが一般的である.
7.例外の発生
自分が例外を発生させたい場合はraiseメソッドを使用します.
8.catchとthrow
begin
rescue
end
Rubyは例外も対象とした.rescueの後に変数名を指定し、例外オブジェクトを取得します.
begin
rescue =>
end
変数名が指定されていなくても、例外オブジェクトは表9.1にリストされている変数に自動的に格納されますが、変数名を明確に指定するプログラムがわかりやすいです.
例外発生時に自動的に設定される変数
変数#ヘンスウ#
意味
$!
最後に発生した例外(オブジェクトなど)
$@
最後の例外が発生した場所に関する情報
また,例外オブジェクトに対して次のようなメソッドを呼び出し,例外に関する情報を取得する.
メソッド名
意味
class
例外カテゴリ
message
例外メッセージ
backtrace
例外の発生位置情報($@は!.backtraceに等しい)
2.善後処理
begin
rescue =>
ensure
end
begin
ensure
end
3.再実行
rescue文ブロックではretry文を使用してbegin文ブロックの動作を再実行できます.
例:
次の例では、オープンメソッドを10秒おきに再試行し、成功するとファイルの内容を返します.
file = ARGV[0]
begin
io = open(file)
rescue
sleep 10
retry
end
data = io.read
io.close
しかし、ファイルが開かないままでは、無限のループになることに注意してください.
4.rescue式
# -*- coding: utf-8 -*-
=begin
rescue , , rescue 。
=end
# val = "abc" # n => 0
val = 3 # n => 3
n = Integer(val) rescue 0
p n
5.例外処理補充
例外処理のbegin~end範囲がメソッド全体である場合、beginとendを省略し、rescueとensure文ブロックのみを書くことができる.
6.例外クラス
すべての例外はExceptionクラスのサブクラスです.
resure文ブロックに例外クラスが指定されていない場合、StandardErrorとそのサブクラスがスナップされます.
したがって,自分が種々の例外クラスを定義する場合,StandardErrorクラスを継承し,次に種々の例外クラスを継承するのが一般的である.
7.例外の発生
自分が例外を発生させたい場合はraiseメソッドを使用します.
8.catchとthrow
def test_throw
throw :test
end
puts "test start"
catch(:test){
puts "before test_throw()"
test_throw
puts "after test_throw()"
}
puts "test end"