2012-12-29 43 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?