事象
SikuliXにてfind
またはfindAll
を実施しようとした際に
[error] script XX stopped with error at line --unknown-- [error] Error caused by: Traceback (most recent call last): File "C:\Users\XX\yy.py", line 1, in <module> find(zz) Line 2761, in file Region.java at org.sikuli.script.Region.wait(Region.java:2761) at org.sikuli.script.Region.find(Region.java:2326) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) org.sikuli.script.FindFailed: FindFailed: 1553149086814.png: (40x41) seen at (611, 460) with 1.00 in S(0)[0,0 1366x768] E:Y, T:3.0 Line 2761, in file Region.java
といった趣旨のエラーが発生し後続処理が行われない。
バージョン
- java version "1.8.0_201"
- Sikulix IDE 1.1.3
解決法
以下のようにifelse文を利用します。
cnt=0 if(exists("1553149086814.png")): for i in findAll("1553149086814.png"): cnt=cnt+1 print cnt else: print cnt
例えばある画像がスクリーン全体にいくつあるかをcntに格納する処理ですがexist
を利用して条件分岐させています。
補足
existを用いた条件分岐に関しては以下記事をご参考ください。
要はfindやfindAllで探索する画像の有無をあらかじめチェックしています。
逆に言えば、チェック対象が画面に存在しない場合に冒頭のエラーが発生するようです。
個人的にはこの部分のロジックはfind
側で拾って欲しいですが今後のバージョンアップに期待です。
以上、SikuliXにおける表題のエラーハンドリングでした。