mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
29fd593475
* doc/syntax/exceptions.rdoc: Syntax guide for exceptions * doc/syntax/literals.rdoc: Syntax guide for literals * doc/syntax/methods.rdoc: Syntax guide for methods git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
79 lines
1.6 KiB
Text
79 lines
1.6 KiB
Text
= Exception Handling
|
|
|
|
Exceptions are rescued in a +begin+/+end+ block:
|
|
|
|
begin
|
|
# code that might raise
|
|
rescue
|
|
# handle exception
|
|
end
|
|
|
|
If you are inside a method you do not need to use +begin+ or +end+ unless you
|
|
wish to limit the scope of rescued exceptions:
|
|
|
|
def my_method
|
|
# ...
|
|
rescue
|
|
# ...
|
|
end
|
|
|
|
The same is true for a +class+ or +module+.
|
|
|
|
You can assign the exception to a local variable by using <tt>=>
|
|
variable_name</tt> at the end of the +rescue+ line:
|
|
|
|
begin
|
|
# ...
|
|
rescue => exception
|
|
warn exception.message
|
|
raise # re-raise the current exception
|
|
end
|
|
|
|
By default StandardError and its subclasses are rescued. You can rescue a
|
|
specific set of exception classes (and their subclasses) by listing them after
|
|
+rescue+:
|
|
|
|
begin
|
|
# ...
|
|
rescue ArgumentError, NameError
|
|
# handle ArgumentError or NameError
|
|
end
|
|
|
|
You may rescue different types of exceptions in different ways:
|
|
|
|
begin
|
|
# ...
|
|
rescue ArgumentError
|
|
# handle ArgumentError
|
|
rescue NameError
|
|
# handle NameError
|
|
rescue
|
|
# handle any StandardError
|
|
end
|
|
|
|
The exception is matched to the rescue section starting at the top, and matches
|
|
only once. If an ArgumentError is raised in the begin section it will not be
|
|
handled in the StandardError section.
|
|
|
|
To always run some code whether an exception was raised or not, use +ensure+:
|
|
|
|
begin
|
|
# ...
|
|
rescue
|
|
# ...
|
|
ensure
|
|
# this always runs
|
|
end
|
|
|
|
You may also run some code when an exception is not raised:
|
|
|
|
begin
|
|
# ...
|
|
rescue
|
|
# ...
|
|
else
|
|
# this runs only when no exception was raised
|
|
ensure
|
|
# ...
|
|
end
|
|
|