1. ホーム
  2. python

Resolve TypeError: 'NoneType' object has no attribute '__getitem__'.

2022-02-18 20:57:14

実はこの問題は、変数が空、つまり「NoneType」型であることが原因であることが多く、おおよそこのような方向性で解決することができます。最近、画像の問題を扱ったときに書いたコードは、あるパスの下にある画像を見つけてメモリに読み込み、4つの座標値 x1, y1; x2, y2 に基づいて画像のROIをスナップするというものでした。

# traversal
                for every_capture_image_dict in content_dict["captures"]:
                    capture_pic_name = every_capture_image_dict["big_image"]
                    # Read the image
                    img = cv2.imread('. /Export/' + Sub_Files + '/' + Same_Person_file + '/'
                                     + capture_pic_name)
                    crop_image = img[int(every_capture_image_dict["position"]["top"]):
                                     int(every_capture_image_dict["position"]["bottom"]),
                                 int(every_capture_image_dict["position"]["left"]):
                                 int(every_capture_image_dict["position"]["right"])]
                    cv2.imwrite('1/' + Same_Person_file + '/' + capture_pic_name, crop_image)

エラーを報告しながら実行します。 TypeError: 'NoneType' オブジェクトには '__getitem__' という属性がありません。 位置づけられたコードの行は

int(every_capture_image_dict["position"]["right"])]

エラーメッセージによると、よく考えたらNULL変数が原因だと推測され、このコードで最も可能性が高いNULL変数はimgで、全部入っているのにNULL値になっています。弟の知恵のおかげで、事前にプリントダウンするパス、それから私は画像のパスの下に報告された対応するエラーを見つけ、それは画像の下のこのパスに問題があることは事実であり、証拠のための上記の画像は

サポートされていない形式の画像があったので、以下のようなコードに決定的に変更された。

# traversal
                for every_capture_image_dict in content_dict["captures"]:
                    capture_pic_name = every_capture_image_dict["big_image"]
                    # Read the image
                    img = cv2.imread('. /Export/' + Sub_Files + '/' + Same_Person_file + '/'
                                     + capture_pic_name)
                    if img is None:
                        continue
                    else:
                        crop_image = img[int(every_capture_image_dict["position"]["top"]):
                                         int(every_capture_image_dict["position"]["bottom"]),
                                     int(every_capture_image_dict["position"]["left"]):
                                     int(every_capture_image_dict["position"]["right"])]
                        cv2.imwrite('1/' + Same_Person_file + '/' + capture_pic_name, crop_image)

もう一度プログラムを実行すると、見事に合格!!!!

プログラムのデバッグは我慢するものです。