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