1

Тема: Власні повідомлення про помилки(виключення) на їх обробка

Всім доброго дня. Сподіваюсь ви мені підкажете як оброблювати виключення програми.
І так:
Я читаю документ  *.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

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

2

Re: Власні повідомлення про помилки(виключення) на їх обробка

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

3

Re: Власні повідомлення про помилки(виключення) на їх обробка

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

Подякували: koala, ostap34PHP2

4

Re: Власні повідомлення про помилки(виключення) на їх обробка

Я не знаю рубі, але на інших мовах, з якими я працював - C++, C#, Java, Python, Delphi, PHP - воно виглядає саме так (а на Rust ні :) )

Подякували: ostap34PHP1

5

Re: Власні повідомлення про помилки(виключення) на їх обробка

FakiNyan написав:

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

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

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

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

6 Востаннє редагувалося koala (29.07.2018 21:43:28)

Re: Власні повідомлення про помилки(виключення) на їх обробка

Очевидно, що якщо ви хочете мати окремі повідомлення про наявність файлу і що це архів, то вам треба це самому перевіряти.

ekkl написав:

Складним, чи неправильним?

Складним, бо це насправді складне завдання - передбачити різні можливі помилки.
Загалом це окрема тема - обробка помилок, і виключення тут - далеко не єдиний шлях (зазвичай ще й не найкращий). Як саме це прийнято робити в ruby чи конкретно з цими методами - не скажу. Можу тільки порадити додавати повідомлення в ексепшені до власного (або в лог), так потім легше буде діагностувати проблему.