为什么我不能挽救在另一个类中定义的此自定义错误?

家伙

我在Rails 6中工作。我在引发该错误的类中定义了一个错误类:

class MyClass < ApplicationRecord
  ...

  class CustomError < StandardError
    attr_reader :param

    def initialize(param)
      @param = param
    end
  end
end

我尝试在客户端代码中营救它,但这并不能捕获它:

rescue MyClass::CustomError => e

在另一方面,这引起了uninitialized constantCustomError,完全按照我期望:

rescue CustomError => e

那这个呢?

rescue MyClass::CustomError => e
  raise unless e.instance_of? MyClass::CustomError
  # do some real error handling
  ...
end

instance_of? 无法识别错误,因此会重新引发。

我什至尝试过:

class MyClass < ApplicationRecord
  ...
end

class MyClass::CustomError < StandardError
  attr_reader :para
  def initialize(param)
    @param = param
  end
end

那就更好了

这2个东西工作都是代码味道:

  1. 在包含类之外定义错误,没有命名空间

  2. 解决一般错误: rescue => e

在MiniTest中也可以正常工作:

e = assert_raises(MyClass::CustomError) do
  ...
end

感觉错误类名CustomError根本无法MyClass::CustomError在应用程序代码中解析,但客户端代码完全需要包含类名来解析该类。

虽然我只是在做些天真/愚蠢的事情,但更有可能!

附加信息:

  • Ruby 2.7.1
  • Rails 6.0.3.3
  • 引发错误的类和处理错误的类都是模型类(有点不寻常)
  • 运行时类提高误差的孩子MyClassMyChild < MyClass < ActiveRecord(还不多见)
家伙

对于任何不知道的人,Rails 4.2添加了Spring,以在终止应用程序时将其保留在内存中(以加快启动时间),Rails 5.2添加了Bootsnap,用于缓存优化的代码。它们中的任何一个都可以保留不变的代码,因为存在怪异的错误。

其中一个只是咬我。Bootsnap似乎在引发该错误,但并未使其在外部可见MyClass删除缓存将其全部清除:

rm -rf tmp/cache/bootsnap-compile-cache/
rm tmp/cache/bootsnap-load-path-cache

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的对象不能访问公共基类中定义的另一个对象的受保护成员?

来自分类Dev

为什么我不能从 python 中的另一个函数调用一个函数。函数未定义错误

来自分类Dev

我们可以继承另一个类中的一个类中定义的自定义变量吗?

来自分类Dev

Node.js:在另一个自定义类中引用自定义类

来自分类Dev

无法从另一个类访问我的自定义视图对象

来自分类Dev

当自定义绘画代码在另一个类中时,不执行自定义绘画

来自分类Dev

为什么我不能从另一个.js文件访问.js文件中定义的JavaScript函数?

来自分类Dev

自定义addToDisplay方法在另一个类中返回异常

来自分类Dev

是否可以在自定义View类中创建另一个控件?

来自分类Dev

在Flutter中创建一个扩展另一个自定义类的类

来自分类Dev

动态在另一个自定义tagLib中调用自定义tagLib

来自分类Dev

在另一个自定义 UIView 中嵌入自定义 UITableViewCell?

来自分类Dev

为什么我不能在另一个类中调用静态方法?

来自分类Dev

为什么我不能从Main类显示此自定义JFrame?

来自分类Dev

如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

来自分类Dev

如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

来自分类Dev

为什么我不能将一个函数中定义的函子传递给另一个函数?

来自分类Dev

我可以创建一个使用Generic.xml中的另一个自定义控件的自定义控件吗

来自分类Dev

为什么我不能为另一个类拉一个方法?

来自分类Dev

当我在自定义组件中将另一个组件作为属性放置时,为什么会出现“访问冲突”?

来自分类Dev

我如何做一个我类的对象数组(继承另一个自定义类)?

来自分类Dev

为什么列表理解中没有定义一个类变量,而另一个却是?

来自分类Dev

WPF:自定义控件属性已被另一个自定义控件错误注册

来自分类Dev

C#-为什么我不能在另一个类中更改我的int变量?

来自分类Dev

编写自定义函数以基于另一个表转换数据框中的变量类

来自分类Dev

如何在 rxJava2 中传递自定义任务和另一个类?

来自分类Dev

如何使用人偶要求另一个自定义类

来自分类Dev

我已经将自定义函数矢量化了,为什么外部给我一个错误?

来自分类Dev

为什么我不能为Material-UI中禁用的元素自定义类?

Related 相关文章

  1. 1

    为什么我的对象不能访问公共基类中定义的另一个对象的受保护成员?

  2. 2

    为什么我不能从 python 中的另一个函数调用一个函数。函数未定义错误

  3. 3

    我们可以继承另一个类中的一个类中定义的自定义变量吗?

  4. 4

    Node.js:在另一个自定义类中引用自定义类

  5. 5

    无法从另一个类访问我的自定义视图对象

  6. 6

    当自定义绘画代码在另一个类中时,不执行自定义绘画

  7. 7

    为什么我不能从另一个.js文件访问.js文件中定义的JavaScript函数?

  8. 8

    自定义addToDisplay方法在另一个类中返回异常

  9. 9

    是否可以在自定义View类中创建另一个控件?

  10. 10

    在Flutter中创建一个扩展另一个自定义类的类

  11. 11

    动态在另一个自定义tagLib中调用自定义tagLib

  12. 12

    在另一个自定义 UIView 中嵌入自定义 UITableViewCell?

  13. 13

    为什么我不能在另一个类中调用静态方法?

  14. 14

    为什么我不能从Main类显示此自定义JFrame?

  15. 15

    如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

  16. 16

    如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

  17. 17

    为什么我不能将一个函数中定义的函子传递给另一个函数?

  18. 18

    我可以创建一个使用Generic.xml中的另一个自定义控件的自定义控件吗

  19. 19

    为什么我不能为另一个类拉一个方法?

  20. 20

    当我在自定义组件中将另一个组件作为属性放置时,为什么会出现“访问冲突”?

  21. 21

    我如何做一个我类的对象数组(继承另一个自定义类)?

  22. 22

    为什么列表理解中没有定义一个类变量,而另一个却是?

  23. 23

    WPF:自定义控件属性已被另一个自定义控件错误注册

  24. 24

    C#-为什么我不能在另一个类中更改我的int变量?

  25. 25

    编写自定义函数以基于另一个表转换数据框中的变量类

  26. 26

    如何在 rxJava2 中传递自定义任务和另一个类?

  27. 27

    如何使用人偶要求另一个自定义类

  28. 28

    我已经将自定义函数矢量化了,为什么外部给我一个错误?

  29. 29

    为什么我不能为Material-UI中禁用的元素自定义类?

热门标签

归档