Ruby 中救援的替代方案?

2024-06-22

好像我有begin ... rescue ... end我的代码中到处都是语句!这似乎不是正确的做法。

谁能建议我如何捕获任何异常而不必将所有内容都放在里面begin ... rescue ... end?有什么方法可以让 Ruby 闭嘴并继续前进,即使出现异常也是如此?


与其他语言一样,对于任何重要的程序,您实际上都需要一个经过深思熟虑的架构来处理异常。一种方法是在项目中定义异常处理范围,然后您通常希望在范围边界捕获(救援)异常。这是一个权衡。堆栈中距离异常发生​​的位置越近,有关触发异常的条件的上下文信息就越多。如果您尝试过于细粒度,则会遇到您所描述的问题。另一方面,如果您只捕获堆栈顶部(在“main”中)的异常,则没有上下文。因此,定义异常处理范围涉及评估与特定程序或系统相关的权衡。

Ruby 为我们提供了“重试”的能力——这是其他一些语言所不具备的。这个应该谨慎使用!但在有意义的情况下(例如等待网络或资源被释放),此类异常需要在本地进行处理。

否则,我倾向于在大型项目中以相当粗粒度的级别定义异常范围。当异常从起始点通过各种异常范围边界冒出时,捕获一些上下文信息通常很有用。为了解决这个问题,您可以通过定义一些您自己的特定于应用程序的异常类型来扩展 Ruby 异常类层次结构,但同样需要权衡。您的项目应该有关于何时使用自定义异常类型与在消息字段中捕获上下文数据、消息字段应包含什么类型的信息等的明确标准,以及对代码可以生成的消息进行编目的策略。

在大多数情况下,可以允许异常向上传播到集中处理程序,进行记录(供技术团队和支持人员使用),为用户生成有用的错误消息,并确定情况是否严重到需要您的程序退出。一般来说,所有异常都应该在您的代码或您正在使用的应用程序框架内进行处理。不应允许任何异常逃逸到语言运行时或操作系统的默认异常处理。

这些是我的想法,主要基于其他语言的经验,但我认为它们非常普遍。最重要的是,在大型项目中,您需要投入大量精力来设计异常处理,而不是临时方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 中救援的替代方案? 的相关文章

  • 导出到 Excel 时线程被中止?

    我有一个绑定到 GridView 的 DataTable 我还有一个按钮 单击该按钮可将 DataTable 导出到 Excel 文件 但是 出现以下错误 ErrMsg 线程正在被中止 这是引发错误的部分代码 private static
  • Laravel 5 错误处理

    我正在使用 Laravel 5 并且正在尝试制作自定义 404 页面和自定义异常处理 但我不知道将代码放在哪里 前段时间有一个 ErrorServiceProvider 不再存在 有人能给我一些指点吗 编辑 我看到他们在 App Excep
  • Bundler 找不到 gem“rack”的兼容版本:

    我是 Ruby 新手 但实际上如果我不想安装 Redmine 我就不需要它 我正在按照以下说明进行操作http www redmine org projects redmine wiki HowTo install Redmine on C
  • 如何按键按字母顺序对 Ruby 哈希进行排序

    我正在尝试按键按字母顺序对哈希进行排序 但如果不创建自己的排序类 我似乎无法找到一种方法来做到这一点 我发现下面的代码可以按值排序 如果它是整数 我正在尝试修改它 但没有任何运气 temp ninjas 36 temp pirates 12
  • 我如何在 python 2.6 中测试抽象方法

    我有一个抽象类 import abc class Hello object metaclass abc ABCMeta abc abstractmethod def add self foo pass abc abstractmethod
  • Rails apns 用于向 Apple ipad 推送通知 - 使用哪个 gem?

    我希望从 Rails 3 0 3 应用程序向苹果推送通知 我发现了各种 apns ish 宝石 包括 apns on rails 其中一些似乎有点旧 1 或 2 年 并且非常不清楚 2012 年使用的 当前 是什么 根据我的标准 您能推荐使
  • 这是什么错误? Net.HttpWebRequest.SetAndOrProcessResponse 中的 System.Net.InternalException

    我们在 HTTP 请求期间遇到了一个非常罕见的错误 System Net InternalException System error at System Net HttpWebRequest SetAndOrProcessResponse
  • 日期时间到时间转换中奇怪的 Ruby 行为

    我的目标是从 DateTime 实例获取 Time 实例 这已经在这里讨论过 但我仍然很困惑 在 Ruby 中与日期时间和时间相互转换 https stackoverflow com questions 279769 convert to
  • 为什么我不能在初始化中使用 attr_accessor ?

    我正在尝试做一个instance eval随后是一个attr accessor inside initialize 我不断收到这样的消息 初始化 未定义的方法 attr accessor 为什么这不起作用 代码看起来有点像这样 class
  • org.hibernate.QueryParameterException:无法找到命名参数[userId]

    我需要帮助 我遇到了上述异常 我哪里错了 在从类到表的映射中 我使用了以下内容 private String userId private String password 下面是我编写查询的类 public class LoginManag
  • Ruby 中神奇的 $ 前缀变量是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我见过 Ruby 中使用这样的神奇变量 0 是否有完整的参考来说明它们的含义以及它们的设置方式 他们的
  • Hashie::Mash 从字符串恢复

    我在这个问题上很挣扎 我已经存储了一个Hashie Mash到一个字符串中 我很难将其恢复为哈希值 这是字符串 map Hashie Mash ncreated at Mon Jul 30 15 42 20 0000 2012 nid 22
  • Python 常见问题解答:“异常有多快?”

    我只是在看Python常见问题解答 因为它在另一个问题中提到了 以前从未真正详细地看过它 我发现这个问题 http docs python org 3 faq design html how fast are exceptions 异常有多
  • EventMachine 的优势是什么

    这是我的测试用例 我发现EM并不比一般的TCP服务器快 EM 服务器 require rubygems require benchmark require eventmachine class Handler lt EventMachine
  • 如何在 swagger 中传递多值查询参数

    我在 swagger yml 中有以下服务 该服务被编写为可以多次传递page id 例如 pages page id 123 page id 542 我检查了这个链接https swagger io specation https swa
  • Java 输入不匹配异常

    我有这段代码 我想捕获字母异常 但它一直有这些错误 Exception in thread main java util InputMismatchException at java util Scanner throwFor Scanne
  • 减少哈希值

    我在使用reduce 语法时遇到了问题 我有以下格式的哈希 H Key1 gt 1 Key2 gt 2 我想使用reduce 来查找该函数中值的总和 就像是 H reduce 0 memo elem memo elem 我知道这是错误的 我
  • spring-boot中自定义404错误页面

    我正在尝试为 SpringMvc Spring boot 版本 1 5 1 中的无效 URL 创建自定义错误页面 为了禁用默认的白标错误页面 我有 应用程序属性 spring thymeleaf cache false server err
  • Rails:构建涉及多态关联和 STI 的查询

    我正在尝试查找有关照片的 10 条最新评论 以便将它们集成到我的 Rails 3 0 3 应用程序上的活动提要中 我有一个Photo模型 它继承自Upload使用单表继承的模型 class Upload lt ActiveRecord Ba
  • Ruby on Rails Active Record RANDOM() 在循环内始终相同

    当每次循环迭代应该抓取随机记录时 为什么会重复输出相同的记录 ID count 0 while count lt 20 puts ID SomeModel where assoc id 10 order RANDOM limit 1 fir

随机推荐

  • 如何解决“org.json.simple.JSONObject无法解析”?

    当我尝试通过 Tomcat 打开 jsp 时 我收到以下消息 无法解析 org json simple JSONObject 类型 它是从所需的 class 文件间接引用的 Ejercicio 类型中的 getJSONObject 方法引用
  • 如何将 Byte 数组转换为 Int 数组

    我正在使用以下方法读取文件 int len int new File args 0 length FileInputStream fis new FileInputStream args 0 byte buf new byte len fi
  • 加载模块一次,requirejs 带有示例

    我已经问过类似的问题 Requirejs Requirejs 加载每个模块一次 是什么意思 https stackoverflow com questions 18434356 requirejs what it means require
  • C/C++ 是否提供最短执行时间的保证?

    为什么编译器似乎对不执行任何操作且不消除它们的循环很礼貌 C 标准是否要求循环需要一些时间 例如 以下代码 void foo void while 1 for int k 0 k lt 1000000000 k printf Foo n 运
  • MFC 中的粗体标签

    我想在 MFC 静态文本 中创建具有以下功能的标签 bold和非粗体文本 像这样的东西 我想要我的标签看起来像这个 例如 有什么想法如何做到这一点 我知道我可以更改整个标签的字体 并将其设置为粗体或不粗体 但是有没有办法合并多种样式 或者提
  • Django:错误的语言偏好

    我使用 Django 用两种语言创建一个 Web 项目 英语和德语 该文档的默认语言是英语 我自己将其翻译成德语并创建了一个 po 文件 我的想法是 如果有人说德语并且浏览器的区域设置设置为 de Django 应该切换到德语 我提供的翻译
  • NFC Intent Filter - 发送消息非主要活动

    我确信这很简单 但我无法弄清楚 我想做的就是通过 NFC 发送消息 如果我将其发送到主要活动 我的代码可以完美工作 但我不知道如何将其发送到不同的活动 我已经查看了 Android 开发者页面上的 NFC 和 Intent Filter 文
  • 获取最后点击的项目 ID

    我有这样的功能 document ready function click function alert this attr id toString 在页面上我有这样的东西
  • 开发复杂的 Javascript 应用程序时可以使用多个 .JS 文件吗?

    来自 C 背景 其中每个类 最佳实践 都存储在自己的单独文件中 这使得开发变得非常干净 我过去从未用 Javascript 编写过任何复杂的内容 但我开始学习 HTML 5 并且我想使用 HTML 5 画布编写一个复杂的游戏 将我的所有函数
  • 如何 cd 到 Mac OSX 终端中的别名目录

    有没有办法使用命令 cd 从 shell 进入别名目录 它总是返回 htdocs 不是目录 编辑 我使用操作系统 GUI 创建了快捷方式 gt 右键单击 htdocs 目录并选择 别名 我使用的是德语操作系统 如果它不是别名 也许它在英语中
  • QMake 模拟 cmake 的“find_package”

    qmake中有没有类似cmake的机制find package 如果我需要包含系统上安装的库 如何避免手动写入包含路径和库名称 最佳实践是什么 如果使用的库提供了 pkgconfig pc 文件 您可以在 pro 文件中使用 link pk
  • 类,其中 T:枚举”不起作用[重复]

    这个问题在这里已经有答案了 可能的重复 创建将 T 约束为枚举的通用方法 https stackoverflow com questions 79126 create generic method constraining t to an
  • 如何将 Jsoup 文档保存为 HTML 文件?

    我已经使用此方法将网页检索到org jsoup nodes Document object myDoc Jsoup connect myURL ignoreContentType true get 我应该如何将此对象写入 HTML 文件 方
  • 用于粘贴代码的良好 IM/聊天解决方案

    我们有几个分布式开发人员在几个项目上一起工作 我们一直在使用 Skype 与所有开发人员进行聊天 除了一件事之外 它运行良好 它确实破坏了我们复制并粘贴到聊天中的任何代码 尤其是 Python 中的空格 这个问题有很多关于聊天客户端和服务器
  • 检索带参数的 LINQ to sql 语句 (IQueryable)

    我试图弄清楚是否有一种方法可以检索在数据库服务器上执行的 完整 sql 语句 我已经找到了一些东西 但它并不完全是我想要的 IQueryable
  • 更改 Android 上的导航栏图标颜色

    I need to change the navigation bar on android Just like the light variant on the right in the image below as given in h
  • 如何检查 x86_64 程序集中的寄存器是否为零 [重复]

    这个问题在这里已经有答案了 我正在尝试检查 x86 64 汇编代码中的值是否为零 我知道这通常包括cmp变体后跟一个jmp变体 但我不确定确切的使用说明 如果您之前刚刚使用过修改 ZF 的指令 只需检查该标志并使用JZ or JE 例如 a
  • RecyclerView 行为 - 打开/关闭键盘时变为空

    我已经实施了一个RecyclerView with SearchView and Filterable 所有课程来自v7 现在有这种行为很烦人 每当键盘打开或关闭时 RecyclerView变为空白 计数仍然正确 但视图为空 我的猜测 这与
  • 线程“main”中的异常 java.lang.NoSuchFieldError:工厂问题

    我正在尝试用 Java 测试 xml 到 excel 转换器 但出现以下异常 Exception in thread main java lang NoSuchFieldError Factory at org apache poi xss
  • Ruby 中救援的替代方案?

    好像我有begin rescue end我的代码中到处都是语句 这似乎不是正确的做法 谁能建议我如何捕获任何异常而不必将所有内容都放在里面begin rescue end 有什么方法可以让 Ruby 闭嘴并继续前进 即使出现异常也是如此 与