4

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

我只想在 Ruby 中复制一个文件:http: //apidock.com/ruby/FileUtils/cp

但是,文档没有说明会引发哪些异常。与 Javadocs 比较:

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path, java.nio.file.Path, java.nio. file.CopyOption...)

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

4

1 回答 1

6

无法保证在 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
于 2012-12-14T11:13:00.513 回答