はじめに
SikuliXにてfind
等を行う際に、対象が確認できない場合に
org.sikuli.script.FindFailed: FindFailed
というエラーで止まってしまう現象があります。
それに対してexist
を利用して事前に条件分岐を行って対処する方法は別記事にて解説しました。
一方、tryとexceptで例外処理としてかわす手法もあります。
本記事ではそれらの利用法と、利用における注意点について解説します。
バージョン
- java version "1.8.0_201"
- Sikulix IDE 1.1.3
try文で囲って例外を扱う
上にも記載した通りexistを利用した条件分岐でも対応ができますが、try文でも同様のことが可能です。
構文は以下です。
cnt=0 try: for i in findAll("1567945538803.png"): cnt=cnt+1 print cnt except FindFailed: print cnt
FindFailedという例外が発生するとtry文を中断してexceptの箇所に移ります。
よって該当の画像がなければ「cnt」は「0」を返してくれます。
注意点
例えば以下のように異なる画像をカウントしようとtryで囲む場合には注意が必要です。
cnt=0 try: for i in findAll("1567945538803.png"): cnt=cnt+1 print cnt for i in findAll("1567945900339.png"): cnt=cnt+1 print cnt except FindFailed: print cnt
一つ目の画像が存在し、二つ目の画像が存在しない場合はcntに一つ目の画像枚数が格納されます。
しかし、二つ目の画像が存在し、一つ目の画像が存在しない場合はcntに二つ目の画像枚数が格納されません。
要は例外を見つけた瞬間にexcept文に飛んでしまうため、後続処理が行われません。
ここは設計の際の注意点になります。
終わりに
画像パターンを探す際に、エラーを回避する策としてtry文を利用する手法を紹介しました。
一枚でも該当画像がなければ、処理を行わずに後続に向かうといったケースではexist文を逐次書くのではなく今回の記法が適していると思います。
以上、ご参考になれば幸いです。