справжній живий рубіст
Саме так, живий.
воно виглядає саме так
Складним, чи неправильним?
Невже потрібно самому провітрити на наявність файлу, чи це архів і потім генерувати власні виключення з власними класами і повідомленнями?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача ekkl
Сторінки 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
Але як на мене,це не зовсім вірний підхід.
Сторінки 1