Ruby异常文档

Ruby异常文档,ruby,Ruby,我是Ruby的新手,来自Java世界 我只想在Ruby中复制一个文件: 然而,这些文件并没有说明将提出哪些例外情况。 与Javadocs相比: 如果不看FileUtils的源代码,有没有办法判断可能会引发哪些异常?无法保证在Ruby中会引发哪些异常。用户可能会发送一个中断,您的文件系统可能无法写入,等等。Ruby对此不作任何保证。但对于文件操作,我可能会从IOError及其子项EOFError开始 这可能会使您能够处理非异常(合理预期)事件,例如文件不存在,或没有读访问权限或没有写访问权限,

我是Ruby的新手,来自Java世界

我只想在Ruby中复制一个文件:

然而,这些文件并没有说明将提出哪些例外情况。 与Javadocs相比:


如果不看FileUtils的源代码,有没有办法判断可能会引发哪些异常?

无法保证在Ruby中会引发哪些异常。用户可能会发送一个中断,您的文件系统可能无法写入,等等。Ruby对此不作任何保证。但对于文件操作,我可能会从IOError及其子项EOFError开始

这可能会使您能够处理非异常(合理预期)事件,例如文件不存在,或没有读访问权限或没有写访问权限,您可以对这些事件进行编程、救援和尝试处理

您还可以编写自己的异常,提出自定义异常(可能继承StandardError),并给出适当的操作或反馈

这是刚刚使用Ruby 1.9.3-p327从我的计算机生成的当前异常层次结构

BasicObject
  Exception
    NoMemoryError
    ScriptError
      LoadError
        Gem::LoadError
      NotImplementedError
      SyntaxError
    SecurityError
    SignalException
      Interrupt
    StandardError
      ArgumentError
      EncodingError
        Encoding::CompatibilityError
        Encoding::ConverterNotFoundError
        Encoding::InvalidByteSequenceError
        Encoding::UndefinedConversionError
      FiberError
      IOError
        EOFError
      IndexError
        KeyError
        StopIteration
      LocalJumpError
      Math::DomainError
      NameError
        NoMethodError
      RangeError
        FloatDomainError
      RegexpError
      RuntimeError
        Gem::Exception
          Gem::CommandLineError
          Gem::DependencyError
          Gem::DependencyRemovalException
          Gem::DocumentError
          Gem::EndOfYAMLException
          Gem::FilePermissionError
          Gem::FormatException
          Gem::GemNotFoundException
          Gem::GemNotInHomeException
          Gem::InstallError
          Gem::InvalidSpecificationException
          Gem::OperationNotSupportedError
          Gem::RemoteError
          Gem::RemoteInstallationCancelled
          Gem::RemoteInstallationSkipped
          Gem::RemoteSourceException
          Gem::VerificationError
      SystemCallError
      ThreadError
      TypeError
      ZeroDivisionError
    SystemExit
      Gem::SystemExitException
    SystemStackError
    fatal

一般来说,在Ruby中处理异常的最佳方法是什么?由于文档从未提及任何可能引发的异常,我们如何捕获细粒度异常?=>如果我们捕获根对象,即异常,我认为它太笼统了(可能会处理方法不应该处理的东西)。实际上,这可能是一个很好的新问题。它足够笼统,可以起到帮助作用,但它可能无法澄清当前的问题。但简而言之,假设您想要捕获用户中断。我们可能会援救
SignalException
,但这会援救我们可能不想援救的其他异常。然后我们看一下表中显示的子异常,也就是说
中断
。现在,我们可以优雅地关闭一个程序,在这个程序中,可能有人按下了
ctrl-c
。仅供参考:最好使用“trap”来处理UNIX信号。