使用Tk和Ruby打开文件并取消时出错

时间:2012-12-29 21:13:18

标签: ruby tk

我是Ruby的新手(以及一般的脚本或编程),似乎无法找出此错误的来源(或烦恼):

因此,复制问题的最小代码是:

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>'

我不得不说我真的不明白发生了什么。有人可以用介绍的方式解释这个问题(我已经搜索了很长一段时间,但是(可能是由于我在这些问题上的知识和词汇量有限)我没有找到任何可以解释这一点的东西)。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

问题是当您按取消时Tk.getOpenFile返回空字符串。然后将空字符串传递给open方法(它需要一个正确的文件路径)并且它会爆炸。

要使代码在所有情况下都能正常工作,您只需要检查空字符串。

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

答案 1 :(得分:1)

Errno :: ENOENT是找不到文件的操作系统错误。

取消时Tk.getOpenFile会返回什么?空字符串

在空字符串上调用open时的错误消息是什么?错误:: ENOENT

你应该做的事情如下:

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