当出现LoadError时如何使用救援

问题描述 投票:0回答:2

我正在尝试使用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
ruby error-handling tk
2个回答
1
投票

无需使用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
投票

[[0]的使用是完全不适当(也是不必要的)。

在需要文件时引发(Ruby脚本,扩展库等)。无法加载。

它是不继承自StandardError的低级错误,并与LoadError绑定。

而是在您自己的名称空间中声明您自己的异常:

Kernel#require
© www.soinside.com 2019 - 2024. All rights reserved.