@tch

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

cannot unpack non-iterable NoneType objectというエラー

Q&A

Closed

作成しているプログラム

画面に表示される画像を認識し、アプリを操作。エクセルの集計が始まるので、出力が終わるまで待機。新たに出現する画像を認識し、次の動作に移行。これを複数回繰り返すものです。

解決したいこと

プログラムを走らせると最初は起動するのですが、しばらくすると、cannot unpack non-iterable NoneType objectというエラーで停止します。色々と調べてみたのですが解決できないため、ご教示いただけませんでしょうか?

発生している問題・エラー

無題.jpg

0 likes

2Answer

コメントでコードのハイライトができなかったので再掲します。

import sys

for number in range(9, 27):
    filename = r"<省略>\image%d.bmp" % number
    # どのファイルをチェックするか進捗を表示
    print("checking %s" % filename)
    pos = pg.locateCenterOnScreen(filename)
    if pos is None:
        # 認識できなかった時に、どのファイルをチェックしていたか表示
        print("Cannot find image: %s" % filename)
        sys.exit(1)

    x, y = pos
1Like

Comments

  1. @tch

    Questioner

    ご教示いただきましたプログラムも追記し確認したところ、ご指摘いただきましたとおり、次の画像である「10」を探している際にエラーになっていました。


    本来であれば、9の出力中は終了するまで待機(出力の完了を認識する画像を待つためのループ)、その処理が終わってから10を探しに行くことを想定しているので、終わっていないにも関わらず、10の認識に進んでいたため、エラーが発生したという状況でした。

    待機のループができていないことが問題のため、こちらの原因を探ってみます。


    独学で本を見たり、ネット調べながら、見よう見まねで書いている状況なので、こういったエラーの見つけ方もあるのだと非常に勉強になりました。


    ご丁寧にご教示いただきまして、ありがとうございました!!
  2. @tch

    Questioner

    その後エラー発生個所が特定できました。
    改めて、ありがとうございました。

pyautogui.locateCenterOnScreenが座標(x,y)ではなくNoneを返却しているのでエラーになっているだと思います。

与えている画像が、画面上で見つけられなかった時にNoneを返すようです

0Like

Comments

  1. @tch

    Questioner

    ご回答いただきましてありがとうございます。
    プログラムを走らせると、その部分は1度きちんと認識して、正常に動作しているので、
    その時点ではx,yを返しているようなのですが、他に考えられる原因はありそうでしょうか?お手数ですがご教示いただけますと幸いです。
  2. forループ一週目で探すimage9.bmpは認識できたが、その後のimage10.bmp~imgae26.bmpのいずれか認識できなかったということではないでしょうか

    ループのどこでエラーが発生したか分かるように、進捗を表示するか、エラー時にどの画像に関するものなのか表示したほうがよいと思いますよ

    ```python
    import sys

    for number in range(9, 27):
    filename = r"<省略>\image%d.bmp" % number
    print("checking %s" % filename) #どのファイルか表示
    pos = pg.locateCenterOnScreen(filename)
    if pos is None:
    print("Cannot find image: %s" % filename)
    sys.exit(1)

    x, y = pos
    ```

    # 後、質問する際は、コードをテキストで書いてもらったほうが回答しやすいです。
    # 回答者の方でも動作確認できますし、改善方法を提案しやすいです。
  3. @tch

    Questioner

    ご丁寧にありがとうございます。
    質問方法についてもご指摘いただきまして、ありがとうございました。
    一度ご教示いただいた内容を元に試してみたいと思います。

Your answer might help someone💌