API使用時にjson読み込むとIndexError: list index out of rangeが出ちゃうときの原因・対処

IndexError: list index out of range

Pythonでよくこのエラーが起こるのでメモ。

このエラーを直訳すると「listのインデックスないもの指定しとるよ!!」ってことですね。

例でいうと以下のような感じ↓

list=[1,2,3,4]
#このリストのインデックスは0からはじまるため、[4]を指定すると「そんなもんないよ!」ってなる
print(list[4])
print(list[4])
IndexError: list index out of range

WebAPI使用時に発生するもの

普通にlistを使用しているときは、このerrorがでてもさほど動じない。

が、webAPI を使用したりしているときに帰ってきたjsonデータ読み込もうとしてこれが発生すると少し混乱する。

 

例としてオープンデータの住所をもとにジオコーディングAPI(緯度経度教えてくれるやつ)を使用している場合をあげます。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pandas as pd
import urllib
import requests

#物資集積所
X = pd.read_excel('03youryou-shiryou3.xlsx',header=None,names=['市町名','名称','住所','所有者名','管理者名','野外活動スペース','Y活動面積','証明の有無','屋内活動スペース','O活動面積','駐車場面積','自家発電設備','貯水槽','無線通信設備','トイレの許容量等','宿泊施設','ヘリコプター離着陸場','食料飲料','医薬品','寝具その他生活必需品','自家発電機用燃料','その他併設施設','避難所','地域防災計画での位置づけ','備考',],skiprows=4,usecols = "B:Z")
#X=X.replace('\n', '', regex=True)
X=X.fillna('なし')
X=X.assign(緯度=0,経度=0)
for index, r in X.iterrows():
   
    Address = r.住所
    makeUrl = "https://msearch.gsi.go.jp/address-search/AddressSearch?q="
    s_quote = urllib.parse.quote(Address)
    response = response = requests.get(makeUrl + s_quote)

    X.loc[index,'緯度']=response.json()[0]["geometry"]["coordinates"][1]
    X.loc[index,'経度']=response.json()[0]["geometry"]["coordinates"][0]
print(X.緯度,X.経度)
X.to_csv('災害csv/物資集積所一覧.csv')

物資集積所の住所データから緯度経度をジオコーディングで会得しようとしてエラーが発生。

原因はここ↓
response.json()[0]["geometry"]["coordinates"][1]

※jsonも読み込むときのインデックス指定がミスってるなら簡単な話ですが、そうではなかったためてこずりました。

 

API使用

アクセスは成功、しかしパラメータに指定された内容に関連するデータがなかった?

ほしかったデータがなにも指定されてないjsonデータが返ってきた

 

こんな感じで、ジオコーディングなどのパラメータを設定してjsonが返ってくるAPIなどを使用していると、今までは普通に読み込めてたjsonデータがIndexError: list index out of rangeを吐くときがあるためこういったことも視野に入れておく。

 

参考:

TechAcademy???? - ?????????Web????

初心者向けに「Python list index out of range」エラーが出た時の対処法について現役エンジニア…