问题标签 [rescue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2872 浏览

ruby - 引发异常时如何中止 Ruby 脚本?

在 Ruby 中,是否有可能引发一个异常,该异常也会自动中止程序,而忽略任何封闭的开始/救援块?

0 投票
2 回答
1201 浏览

ruby-on-rails - rails 3.1:应用程序如何处理 ActiveRecord::RecordInvalid 的不同“原因”(例如,重复与验证错误)

在我的应用程序中,我有时会即时创建用户,并且用户的电子邮件必须是有效格式并且是唯一的。

我想根据哪个验证导致错误被重定向到不同的地方:格式无效与重复。

在我的代码中,我有

如果电子邮件格式无效(例如“user@example”) e.message 为“验证失败:电子邮件无效”

如果电子邮件已经存在于表中,e.message 为“验证失败:电子邮件已被占用”

我讨厌解析 e.message 文本以确定原因的想法......救援处理程序是否有更好的方法来检测引发 ActiveRecord::RecordInvalid 异常的根本原因?

PS我知道在这个例子中我可以在保存之前简单地检查已经存在的电子邮件,但我试图了解检测和处理不同验证失败并抛出相同异常的一般解决方案。

0 投票
3 回答
1145 浏览

ruby - ruby 没有超越第一个救援代码?

根据我对文档的理解,这种通用方法应该有效:

但是,每当我尝试打开 Watir-Webdriver 浏览器时,它似乎永远不会尝试超过第二个$browser = Watir::Browser.new,在第 189 行结束脚本, 连接被拒绝 - connect(2) (Errno::ECONNREFUSED )

代码.rb:

为了让第186行失败,我特意提前设置了DISPLAY=:88到一个不存在的Xserver,所以这个错误是可以的:186: unable to get stable firefox connection in 60 seconds (127.0.0.1:7055)

我在哪里出错了,还是有更好的方法来做到这一点?这是 Selenium 或 Watir 特有的东西吗?

0 投票
3 回答
406 浏览

ruby-on-rails - Ruby 异常 - 如果语句救援不处理异常

我每个人,我在处理 ruby​​ 中的异常时遇到了一些问题。我不明白为什么我的陈述不起作用。

错误:找不到 id=14 的用户我想重定向到登录页面。

希望您能够帮助我。

亲切地,奥宾

0 投票
4 回答
1237 浏览

ruby - 为什么这种救援语法有效?

好的,所以我有我正在使用的应用程序的这种方法,它可以在生产中使用。我的问题为什么这行得通?这是新的 Ruby 语法吗?

0 投票
1 回答
3648 浏览

ruby-on-rails-3 - Rails 如何在开发模式下自动从 ActiveRecord::RecordNotFound 中救援?

我在我的上使用以下代码ApplicationController

为了使 Rails 以正确的状态代码响应,并且在开发模式下不引发异常。

我知道how-to-handle-errors-like-404-500-in-rails3解释了 Rails 如何在生产模式下工作。换句话说,我在开发模式下尝试做的事情是在生产模式下没有任何代码。

如何使开发模式表现得像生产模式并摆脱上面的代码?

请注意,我正在使用Rails 3.2.3

0 投票
1 回答
304 浏览

ruby - 异常没有被救援块捕获

问题与radis-rb宝石有关。

我的救援块没有捕获到异常,并且我的应用程序出现故障。

我的代码:

如果redis是down,消息WTF?被暴露。

无论有没有 Exception 语句,都会发生这种情况。

为什么我的救援块没有引发异常?

0 投票
1 回答
222 浏览

ruby - 忽略 Twitter Gem 异常

如何拯救和忽略 twitter gem 抛出的异常?我想要的是这个

有没有更好的方法来做到这一点,所以我不重复代码?

0 投票
2 回答
6940 浏览

ruby - Ruby 忽略救援 ArgumentError

当我运行以下命令时,ArgumentError 似乎忽略了救援。来自 Ruby 的 ArgumentError 错误消息出现在控制台上,但我的 puts 消息没有出现。我尝试使用 TypeError 和 ZeroDivisionError 进行救援,并且成功了。

0 投票
2 回答
1989 浏览

ruby-on-rails - 不一致的 Timeout::timeout 和救援 Timeout::Error 行为

我正在使用Timeout::timeout(1)一个需要超过 1 秒的过程,尽管它只是偶尔触发超时。当它发生时,rescue每次都以不同的方式捕获它。这是我的代码示例:

以下是我在相同输入下遇到的三种情况:

  • 流程运行完成,耗时超过 60 秒
  • execution expired进程超时并挂起,仅打印development.log
  • 进程超时,被正确抢救,打印"Timeout"development.log返回nil

为什么这如此不一致?

更新

将超时时间减少到 0.0001 秒后,该过程会始终如预期地超时。似乎该open(file_url)块的打开速度超过 1 秒,尽管该块内的所有内容都花费了超过 1 秒,但Timeout只有在打开本身花费的时间超过 1 秒时才会触发。

然而,这并没有解释execution expired异常。为了测试这一点,我将 移至块Timeout::timeout(0.0001)内。open代码如下所示:

现在,我一直在收到输出EXCEPTION 2 - execution expired。为什么Timeout::Error这里没有被触发?