|
Глава 11. Пытаемся избежать сбоевВо всех сценариях, которые мы обсуждали до сих пор, предполагалось, что если AppleScript в процессе выполнения столкнется с ошибкой, то выполнение сценария завершится.
beep
set x to 1 / 0 [1]
say "You will never hear this!" -- вы этого никогда не услышите
Если вы проверите синтаксис сценария [1], AppleScript не сообщит о каких-либо проблемах. Однако, если запустить сценарий, вы не услышите фразы [1.3], потому что выполнение сценария остановится на операторе [1.2], даже несмотря на правильность оператора [1.3]. Конечно, завершение сценария не обязательно именно то, чего вы ожидаете. Например, если ваш сценарий требует наличия папки с файлами для работы, и папка была удалена, имеет смысл предоставить пользователю возможность выбрать другую папку. Когда пишется сценарий, вы должны определять операторы, которые чувствительны к проблемам в процессе выполнения. Заключите эти операторы в блок try ... end tray, как продемонстрировано здесь [2].
try
beep
set x to 1 / 0
say "You will never hear this!" [2]
end try
say "The error does not stop this sentence being spoken" -- ошибка не остановит произнесение этой фразы
Теперь, если запустить сценарий, вы услышите вторую фразу [2.6], так как AppleScript продолжит выполнение сценария после оператора "end try" [2.4]. В главе 7, в которой обсуждались записи, мы столкнулись со следующим сценарием [3]
set temp to display dialog "What is your age in years?" default answer ""
set ageEntered to text returned of temp [3]
set ageInMonths to ageEntered * 12
display dialog "Your age in months is " & ageInMonths
Проблема в этом сценарии в том, что пользователь введёт что-либо еще вместо числа, и в сценарии будет сбой. Мы можем избежать прерывание работы сценария, и обеспечить пользователя полезной обратной связью [4].
set temp to display dialog "What is your age in years?" default answer ""
set ageEntered to text returned of temp
try
-- Сначала проверим, что пользователь ввел число
set ageEntered to ageEntered as number
set ageInMonths to ageEntered * 12
display dialog "Your age in months is " & ageInMonths [4]
on error
-- Если это не число, то ввод должно быть является текстом.
display dialog "Instead of a number, like 30, you entered text."
-- В отличие от числа, подобного 30, вы ввели текст.
end try
Теперь, если пользователь введет не число, он будет обеспечен обратной связью. Единственное неудобство в том, что пользователь должен запустить сценарий еще раз. В главе 13 мы решим и эту проблему. В Script Editor очень легко заключать текст в блоки try. Просто выберите один или несколько операторов, которые вы хотите включить в блок try, и через контекстное меню, выберите нужный пункт в подменю "Error Handlers", такой например как использован в сценарии [5]. Когда сценарий переключится на часть "on error" блока try, у AppleScript будет для вас пара полезных вещей: номер ошибки и описание проблемы (зачастую оно зашифровано).
try
set x to 1 / 0
on error the error_message number the error_number
display dialog "Error: " & the error_number & ". " & the error_message [5]
buttons {"OK"} default button 1
end try
Если вы поместите имя переменной после "on error", описание проблемы будет присвоено этой переменной. Если имени переменной предшествует "number", то этой переменной будет присвоен номер ошибки. В операторе [5.3] мы имеем оба варианта. Дополнительная информация
|
||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети