(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【SikuliX】org.sikuli.script.FindFailedをif~existで回避する

スポンサーリンク

事象

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における表題のエラーハンドリングでした。