首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Exception Handling

例外情况在begin/ end块中获救:

代码语言:javascript
复制
begin
  # code that might raise
rescue
  # handle exception
end

如果你在一个方法中,你不需要使用,begin或者end你想限制解救异常的范围:

代码语言:javascript
复制
def my_method
  # ...
rescue
  # ...
end

classmodule也是如此。

您可以通过=> variable_name在行尾使用将异常分配给本地变量rescue

代码语言:javascript
复制
begin
  # ...
rescue => exception
  warn exception.message
  raise # re-raise the current exception
end

默认情况下,StandardError 及其子类被救出。您可以通过上市后他们抢救一组特定的异常类(及其子类)的rescue

代码语言:javascript
复制
begin
  # ...
rescue ArgumentError, NameError
  # handle ArgumentError or NameError
end

你可以用不同的方式拯救不同类型的例外:

代码语言:javascript
复制
begin
  # ...
rescue ArgumentError
  # handle ArgumentError
rescue NameError
  # handle NameError
rescue
  # handle any StandardError
end

例外与从顶部开始的救援部分相匹配,并且仅匹配一次。如果在开始部分引发了一个 ArgumentError,它将不会在 StandardError 部分中处理。

您可以重试获救的例外情况:

代码语言:javascript
复制
begin
  # ...
rescue
  # do something that may change the result of the begin block
  retry
end

执行将在开始块的开始处恢复,因此小心不要创建无限循环。

在救援块内部是唯一有效位置retry,所有其他用途将引发 SyntaxError。如果你想重试块迭代使用redo。详细信息请参阅控制表达式。

无论是否引发异常,都要运行一些代码,请使用ensure

代码语言:javascript
复制
begin
  # ...
rescue
  # ...
ensure
  # this always runs
end

当没有引发异常时,您也可以运行一些代码:

代码语言:javascript
复制
begin
  # ...
rescue
  # ...
else
  # this runs only when no exception was raised
ensure
  # ...
end

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com