【问题标题】:Catch 'cannot stat : No such file or directory' error in Ruby在 Ruby 中捕获“无法统计:没有这样的文件或目录”错误
【发布时间】:2019-01-10 01:12:46
【问题描述】:

我正在使用 /bin/cp/ 将文件从一个目录复制到另一个目录。如果源目录中不存在该文件,编译器会抛出此错误:

/bin/cp: cannot stat `path/to/file': 没有这样的文件或目录

我想捕获这个错误,以便显示我的错误消息。

begin
  `/bin/cp /path/to/file /current/directory/`   
rescue
  print("File was not found")   
  exit 1;
end

但控制永远不会去救援。它仍然打印出上面提到的错误。

【问题讨论】:

    标签: ruby exception


    【解决方案1】:

    主要错误是您正在执行系统调用,而系统调用在失败时不会给您异常。

    所以你可以这样做

    #!/bin/env ruby
    
    require 'fileutils'
    
    begin
      FileUtils.cp '/path/to/file', '/current/directory/'
    rescue Errno::ENOENT
      print('File was not found')
      exit 1
    end
    

    显然,您可以挽救所有异常,但最好的做法是说出您想要管理的错误。

    如果你仍然试图通过系统调用来做,你可以做这样的事情

    #!/bin/env ruby
    
    unless system('/bin/cp /path/to/file /current/directory/ 2> /dev/null')
      puts 'my custom error'
      exit(1)
    end
    

    但是如果你想管理许多错误(比如没有空间),你会失去控制

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多