例外类型列表在哪里?

时间:2015-07-07 14:32:57

标签: ruby-on-rails ruby

请帮我查一下官方文档,列出一系列例外情况。我写了这个动作:

def show
  begin
    @user = User.find(params[:id])   
  rescue ActiveRecord::RecordNotFound => e
    logger.debug e
    logger.debug "Error #{$!}"
    render_404      
  end
end

我需要提到几种类型的例外:

def show
  begin
    @user = User.find(params[:id])   
  rescue ActiveRecord::RecordNotFound => e
    logger.debug e
    logger.debug "Error #{$!}"
    render_404  
  rescue anotherExceptionType1 => e   
    ......
    ......
    ..... 
  rescue anotherExceptionType2 => e   
    ......
    ......
    ..... 
  rescue anotherExceptionType3 => e   
    ......
    ......
    .....         
  end
end

但我没有在文档中找到例外列表。

5 个答案:

答案 0 :(得分:6)

您可以在此处查看ActiveRecordError的所有子类: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/errors.rb

答案 1 :(得分:3)

我可以给你一个例外列表,但我不确定这是不是你真正想要的。相反,您可能想知道在特定情况下会抛出哪些异常。更重要的是,你可能不应该开始拯救例外。有关更多信息,请查看this link

但是你要求list,所以你去了:

  • 异常
  • NoMemoryError
  • ScriptError
  • LoadError
  • NotImplementedError
  • 的SyntaxError
  • SignalException
  • 中断
  • StandardError的
  • 引发ArgumentError
  • 的IOError
  • 的EOFError
  • IndexError
  • LocalJumpError
  • NameError
  • NoMethodError
  • 的RangeError
  • FloatDomainError
  • RegexpError
  • RuntimeError
  • 的SecurityError
  • SystemCallError
  • SystemStackError
  • ThreadError
  • 类型错误
  • ZeroDivisionError
  • SystemExit
  • 致命

您也可以访问该链接以查找错误的层次结构。

答案 2 :(得分:2)

如果我正确理解了这个问题,这里是可用例外列表。

https://devcenter.heroku.com/articles/buildpacks

答案 3 :(得分:1)

没有。

原因是你可以实现自己的例外,有效地使任何这样的列表无效。

至于ActiveRecord::RecordNotFound你不应该拯救它大部分时间,因为Rails会拯救它并提供标准的404响应,默认情况下呈现public/404.html

除非是“允许失败”。如果是这种情况,则不应使用find,而是使用find_by_id代替nil如果找不到给定记录,不会引发异常

其他异常通常表示您的应用程序出现严重故障(例如数据库丢失或网络开始过自己的生命)。通常情况下,您的应用程序应该不会提如果发生严重事件并且您完全确定无法处理此请求,请引发异常:它会冒出来并变为500 Internal Server Error响应。

您应该防止在正常执行应用程序期间引发异常。

答案 4 :(得分:0)

获取从Exception继承的所有类:

exceptions = ObjectSpace.each_object(Class).select{|c| c < Exception  }

打印:

exceptions.map(&:to_s).sort.each{|s| puts s}