FakiNyan написав:

справжній живий рубіст

Саме так, живий.

воно виглядає саме так

Складним, чи неправильним?
Невже потрібно самому провітрити на наявність файлу, чи це архів і потім генерувати власні виключення з власними класами і повідомленнями?

Невже таке складне  питання? Можливо в мене підхід неправильний?

Всім доброго дня. Сподіваюсь ви мені підкажете як оброблювати виключення програми.
І так:
Я читаю документ  *.ODT

    #!/usr/bin/env ruby

    require 'zip'

    ContentXML = 'content.xml'
    
    odtfile = ARGF.argv[0]
    begin
        p "Read file: " + odtfile
        p Zip::File.open(odtfile).read(ContentXML)
    rescue StandardError => e
        p e
    end

У випадку помилки буде від ображено стандартне програмне повідомлення  (File not found,  context.xml not presnt, ну і т.д.) Але як можна зробити, щоб показувалися власні повідомлення

    p 'File name expected'
    p 'File not found'
    p 'Incorrect odt document (Content.xml not present)'

   
І можливо, при якомусь конкретному виключенні виконати додаткові дії. Справа в тому, що будь-яка помилка потрапить в цей обробник. Єдина інформація, яку я можу взнати — опис виключення.

На https://www.rubydoc.info/gems/rubyzip/1.2.1/Zip/Error Дуже поганий опис. Є згадка про класи виключень, але ні слова про те, коли якому класу буде належати дане виключення.

Експеримент показав що

    rescue StandardError => e
        puts e.class.name
    end

Виключення класу **Zip::Error** якщо файл не знайдено, або це не архів, і **Errno::ENOENT** якщо відсутній  content.xml

Можна зробити так

    rescue  Zip::Error => e
        p 'File not found'
    rescue Errno::ENOENT => e
        p 'Incorrect ODT file'
    end

Але як на мене,це не зовсім вірний підхід.