gpt4 book ai didi

sinatra - 在 Sinatra 中,有没有办法对某些错误使用我自己的错误处理程序,而对所有其他错误使用默认处理程序?

转载 作者:行者123 更新时间:2023-12-04 18:48:15 26 4
gpt4 key购买 nike

问题是默认处理程序是在 中定义的。 Sinatra::ShowExceptions ,由 控制:raise_errors 配置设置,这个设置是全有或全无。如果 :raise_errors 关闭然后 错误 方法可以在 Sinatra 应用程序中使用,但它必须用于所有异常,并且无法访问 中定义的错误处理程序Sinatra::ShowExceptions .如果它打开,那么所有异常都由 ShowExceptions 中间件处理。

我想做的事情的基本原理是,至少在开发过程中,我希望以用户友好的方式处理“预期”错误,并且希望以对开发人员友好的方式处理“意外”错误。

我猜想这样做的唯一方法是定义一个继承自 的 Rack 中间件类。 Sinatra::ShowExceptions ,并且在其 中有一些额外的选项使用 方法来指定处理或不处理哪些类的异常。

有没有我想念的更简单的方法?

(我正在使用 jruby,如果这有什么不同的话。)

最佳答案

我发现这似乎有效:

set :raise_errors, false
set :show_exceptions, false

...

error BaseErrorClassForMySpecialErrors do
# ... special handling for sub-classes of this error class
end

$showExceptions = Sinatra::ShowExceptions.new(self)

error do
@error = env['sinatra.error']
$showExceptions.pretty(env, @error)
end

换句话说,设置 :raise_errors :show_exceptions 关闭 ShowExceptions 对错误的处理,然后创建一个单独的 实例Sinatra::ShowExceptions ,并调用其 漂亮 中的方法错误执行包罗万象的错误处理程序。

希望创建一个额外的 实例Sinatra::ShowExceptions 为此目的没有任何意外的副作用。

关于sinatra - 在 Sinatra 中,有没有办法对某些错误使用我自己的错误处理程序,而对所有其他错误使用默认处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10428043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com