1

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

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

4

2 回答 2

2

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

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

file_path = Tk.getOpenFile
open(file_path) unless file_path.empty?
于 2012-12-29T22:40:51.270 回答
1

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

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

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

您可能应该执行以下操作:

file = Tk.getOpenFile
open(file) unless file.empty?
于 2012-12-29T22:40:05.867 回答