2012-12-29 20 views
1

我是Ruby的新手(通常是腳本或編程),似乎無法弄清楚此錯誤(或煩惱)的來源:在Ruby中使用Tk打開文件和取消的錯誤

所以最少的代碼複製的問題是:

require 'tk' 

open(Tk.getOpenFile) 

現在對話框打開,如預期,一切都很好,只要我選擇一些文件。如果我按取消,我希望它悄悄地關閉對話框,但它會引發各種錯誤。有什麼我可以做,以防止這些錯誤消息?

我收到錯誤消息是:

file_path:in `initialize': No such file or directory - (Errno::ENOENT) 
    from file_path:3:in `open' 
    from file_path:3:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

我不得不說,我真的不明白髮生了什麼。有人能以一種介紹性的方式解釋這一點(我已經搜索了很長時間,但可能是由於我在這些問題上的知識和詞彙有限),我沒有找到任何解釋這一點的東西)。任何幫助將不勝感激。

+0

我在腳本中寫了這兩條指令(require'tk'+ open)並執行它。我可以選擇一個文件並打開,或關閉對話框,沒有什麼不好的事情發生。您給出的錯誤消息顯示有其他語句(load,file_path)可能是錯誤的原因。請檢查這兩條語句會發生什麼情況,並提供更多您正在執行的代碼。 – BernardK

+0

當我僅執行那兩行代碼時,會發生這種情況。只有當按下「取消」按鈕時纔會發生 –

回答

1

Errno :: ENOENT是沒有找到文件的操作系統錯誤。

Tk.getOpenFile在取消時返回什麼?空字符串

打開空字符串時調用什麼錯誤消息?錯誤:: ENOENT

你或許應該這樣做:

file = Tk.getOpenFile 
open(file) unless file.empty? 
2

的問題是,Tk.getOpenFile返回當您按下取消一個空字符串。然後,您將空字符串傳遞給open方法(它需要一個正確的文件路徑),並且它爆炸了。

爲了使代碼在所有情況下都能正常工作,您只需檢查空字符串。

file_path = Tk.getOpenFile 
open(file_path) unless file_path.empty?