我正在尝试使用Tk实现文件对话框。这方面已经起作用,但是我的错误检查不起作用。
由于此文件对话框只能进行某些扩展,所以我提出了LoadError,但是我也不想停止该程序,因此我希望它重新打开以允许用户选择另一个文件。
我尝试过的每一种方法都只能以无限循环或LoadError停止程序结束。
我的代码是:
module FileExplorer
require 'tk'
require 'tkextlib/tile'
def self.fileDialog
TkClipboard.append(Tk.getOpenFile)
f = TkClipboard.get
begin
unless extenstionCheck(f)
raise LoadError, 'Please select a valid file type'
end
rescue LoadError
fileDialog
end
end
def self.extenstionCheck(file)
filetypes = ['.xlsx', '.xls', '.csv', '.xml']
type = File.extname(file)
true if filetypes.include?(file)
end
end
无需使用TkClipboard,也无需使用异常。
拼写错误的单词“ extension”是否使您看不到附近的错误,即检查filetypes
是否包含file
而不是type
?
您的程序,至少做了如下更改,对我有用:
module FileExplorer
require 'tk'
require 'tkextlib/tile'
def self.fileDialog
while true
f = Tk.getOpenFile
break if extension_okay?(f)
Tk.messageBox message: 'Please select a valid file type!', detail: "Selection was: #{f}"
end
f
end
def self.extension_okay?(file)
filetypes = ['.xlsx', '.xls', '.csv', '.xml']
type = File.extname(file)
filetypes.include?(type)
end
end
p FileExplorer.fileDialog
[[0]的使用是完全不适当(也是不必要的)。
在需要文件时引发(Ruby脚本,扩展库等)。无法加载。
它是不继承自StandardError的低级错误,并与LoadError绑定。
而是在您自己的名称空间中声明您自己的异常:
Kernel#require