Мы можем написать функцию полезности, которая внутренне обрабатывает None
-изложенные случаи и вызывает исключение / возвращает некоторое фиктивное значение данного типа:
from xml.etree.ElementTree import Element
def find(element: Element,
tag: str) -> Element:
result = element.find(tag)
assert result is not None, ('No tag "{tag}" found '
'in element "{element}".'
.format(tag=tag,
element=element))
return result
преимущество утверждений (по сравнению с повышением исключения вручную) заключается в том, что они могут быть отключены , но если вы работаете с некоторыми данными по отдельности, я рекомендую поднять исключение, например
if result is None:
raise LookupError('No tag "{tag}" found '
'in element "{element}".'
.format(tag=tag,
element=element))
Я использую аннотации типов, так как это помогает IDE, и это также экономит много времени при чтении API, но я не являюсь пользователем mypy, потому что мне не нравится идея проверять все, как в этом случае: если функция пользователя передает мусор, то это его вина, мы должны позволить ему сделать это вместо того, чтобы что-то писать о «у вас есть объединение типов и не обрабатывать случаи с некоторыми из них», EAFP после всех .
Эта работа для меня с использованием последней версии MacOS Mojave
tell application "Preview" to activate
repeat while application "Preview" is not running
delay 0.2
end repeat
tell application "System Events"
try
click menu item "Show Markup Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
try
click menu item "Show Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
repeat while not (exists of toolbar 1 of window 1 of application process "Preview")
delay 0.2
end repeat
set description2 to a reference to every checkbox of toolbar 1 of window 1 of application process "Preview"
set theCheckboxes to description of description2
if item 1 of theCheckboxes is "Draw" then
set checkBoxDraw to 1
else
set checkBoxDraw to 2
end if
if item 1 of theCheckboxes is "Sketch" then
set checkBoxSketch to 1
else
set checkBoxSketch to 2
end if
delay 1
-- Below, insert either checkBoxSketch for "Sketch" or checkBoxDraw for "Draw"
click checkbox checkBoxDraw of toolbar 1 of window 1 of application process "Preview"
end tell
-- without these next following lines, the toolbar "Draw" or "Sketch" do not appear to be selected
tell application "Preview" to tell window 1
set visible to false
set visible to true
end tell
delay 3