2011-04-26 110 views
0
def slicer_imlib2(zoom_level, file_path, output_path) 
    begin 
     tile_size = 256 
     file_path = "public/#{file_path}" 

     image = Imlib2::Image.load_image file_path 

     image_width = image.width 
     image_height = image.height 
..... 
.... 
    end 
     end 
     image = nil 
    rescue 
     return false 
    else 
     return true 
    end 
end 

的展开救援块不工作处理红宝石“失败......”

我越来越

[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts 
[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts 
[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts 
[Worker()] 3 jobs processed at 32.5508 j/s, 3 failed ... 

我想,如果即时得到Imlib2返回false ::错误:: DeletedError:图像删除

回答

1

尝试

begin 
    # ... 
rescue Imlib2::Error::DeletedError 
    # ... 
else 
    # ... 
end 

rescue(不指定ErrorClass)只捕获StandardErrors(Imlib2 :: Error :: DeletedError直接从Exception中继承)。

+0

谢谢!我正在考虑指定,但我100%肯定它会捕获所有错误 – ddayan 2011-04-26 09:15:45

+0

总是捕捉所有的方法是编写“救援异常”,但它通常不被推荐,因为它会真的抓住一切(甚至SyntaxErrors) – 2011-04-26 11:05:14

+0

将救援Imlib2 :: Error会捕获与Imlib2有关的所有错误? – ddayan 2011-04-26 11:33:24

0

J -_- L给你一个很好的答案,但我只是想在实践方面说些什么,这可能会让你免于麻烦。

在你的例子中,我不会使用异常。如果你想检查图像是否被删除,最好使用标准查找并处理返回值。

通常应该使用异常来处理用户输入,但要查找奇怪的事情发生。例如,一个期望参数为1或0的方法突然获得2作为输入。这将是一个适当的异常处理地点。

+0

图像不会被删除,当没有足够的内存来加载图像时,Imlib2不会说出任何内容,直到您尝试使用指向内存中图像的变量。库看到指针不指向图像,它会打印出“图像被删除”,这与您试图在无变量上使用Imlib2相同。我想图书馆应该将这些例外情况区分为不同类型,我花了一些时间才找出“图像被删除”的原因。 – ddayan 2011-04-26 09:32:11

+0

噢好吧然后,我不知道内部工作:) – Spyros 2011-04-26 09:33:22