Rails 如何在 controller 中捕获 SyntaxError 异常

ane · 2015年09月10日 · 最后由 pynix 回复于 2015年09月11日 · 2626 次阅读

最简单的方式是这样的,

def index
    begin
    @articles = Article.all
    rescue Exception => e
        puts "error:#{$!} at:#{$@}" 
    end
end
$! #表示异常信息  
$@ #表示异常出现的代码位置 

如果我查找一个不存在的 article,比如这样:

def index
    begin
    @articles = Article.find 10000 # 10000是不存在的
    rescue Exception => e
        puts "error:#{$!} at:#{$@}" 
    end
end

这样是可以顺利捕获这个 StandardError 异常。

我现在改成这样,故意少一个“=”:

def index
    begin
    @articles  Article.all #少等号
    rescue Exception => e
        puts "error:#{$!} at:#{$@}" 
    end
end

console 报一个syntax error, unexpected tCONSTANT, expecting keyword_end,但是代码里没法目前没有捕获到,有什么方法可以获取这个异常?

SyntaxError 异常,在 web-console 这个 gem 中是可以捕获的,目前没搞明白,它是通过怎样的方式捕获

rails4 中使用了 web-console,event = ActiveSupport::Notifications::Event.new (*args).payload[:request].env["web_console.exception"] 这种方式是可以获取 SyntaxError

语法错误是 Ruby 没法解析你的脚本,还没到抛异常呢。

#1 楼 @piecehealth 我也觉得是这样,可为啥那个 gem 里居然获取到了。是不是有什么方式可以?

语法分析阶段就抛的错误。。。。运行时异常。。。

你确定你的应用能够启动?

#4 楼 @pynix 这个只是个 controller 中的写的,启动的时候,是不会执行的。

web-console 能够捕获是因为造成异常的源代码在其他文件中。假设有如下代码:

a.rb

bad code

b.rb

begin
  require "./a"
rescue Exception => e
  puts e.inspect
end

ruby b.rb将打印出 SyntaxError。

#5 楼 @ane 启动的时候不 require controller?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号