2011-04-26 104 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