Строковый индекс вне допустимого диапазона - запрос API - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь получить доступ к большому количеству данных морфометрии c нейронов (18200 нейронов, если быть точным), но у меня выходит ошибка строки. Вначале я хотел бы упомянуть, что я использовал этот код много раз для доступа к другим нейронам (4000 сразу было моим максимумом до этого), и он работал без единой проблемы.

n = [**neurons numbers should go here, but i'm limited with the number of characters**]
neuron_morphometry = []
for i in n:
    url = "http://neuromorpho.org/api/morphometry/id/" + str(i)
    response = requests.get(url)
    json_data = response.json()
    neuron_morphometry.append(json_data)
    neuron_morphometry = []
 print (neuron_morphometry)

Результат вот так:

IndexError Traceback (последний вызов последним) ~ \ Anaconda3 \ lib \ site-packages \ simplejson \ scanner.py в _scan_once (string, idx) 36 try: ---> 37 nextchar = string [idx] 38 за исключением IndexError:

IndexError: индекс строки вне диапазона

Во время обработки указанного выше исключения произошло другое исключение:

JSONDecodeError Traceback (большинство последний вызов последний) в 4 url ​​= "http://neuromorpho.org/api/morphometry/id/" + str (i) 5 response = requests.get (url) ----> 6 json_data = response. json () 7 neuroon_morphometry.append (json_data) 8 #print (neuroon_morphometry)

~ \ Anaconda3 \ lib \ site-packages \ requests \ models.py in json (self, ** kwargs) 896 # used. 897 проход -> 898 вернуть комплекс json .loads (self.text, ** kwargs) 899 900 @ property

~ \ Anaconda3 \ lib \ site-packages \ simplejson_ init _.py в загрузках (s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, use_decimal, ** kw) 516 parse_constant is None и object_pairs_hook is None 517 и не use_decimal и не return kw): -> 5 _default_decoder.decode (s) 519, если cls равно None: 520 cls = JSONDecoder

~ \ Anaconda3 \ lib \ site-packages \ simplejson \ decoder.py в decode (self, s, _w, _PY3) 368, если _PY3 и isinstance (s, bytes): 369 s = str (s, self.encoding) -> 370 obj, end = self.raw_decode (s) 371 end = _w (s, end) .end () 372 if end ! = len (s):

~ \ Anaconda3 \ lib \ site-packages \ simplejson \ decoder.py в raw_decode (self, s, idx, _w, _PY3) 398 elif ord0 == 0xef and s [ idx: idx + 3] == '\ xef \ xbb \ xbf': 399 idx + = 3 -> 400 return self.scan_once (s, idx = _w (s, idx) .end ())

~ \ Anaconda3 \ lib \ site-packages \ simplejson \ scanner.py в sc an_once (string, idx) 77 raise JSONDecodeError ('Expecting value', string, idx) 78 try: ---> 79 return _scan_once (string, idx) 80 finally: 81 memo.clear ()

~ \ Anaconda3 \ lib \ site-packages \ simplejson \ scanner.py в _scan_once (string, idx) 37 nextchar = string [idx] 38, кроме IndexError: ---> 39 поднять JSONDecodeError (errmsg, string, idx) 40 41, если nextchar == '"':

JSONDecodeError: Ожидаемое значение: строка 1 столбец 1 (символ 0)

Я предполагаю, что некоторые данные для определенного количества нейронов отсутствуют или отсутствуют строка, поэтому я попытался пропустить те нейроны, которые не могут быть получены с помощью следующего кода:

for i in n:
    url = "http://neuromorpho.org/api/morphometry/id/" + str(i)
    response = requests.get(url)
    try:
        json_data = response.json()
    except ValueError:
        continue
    neuron_morphometry.append(json_data)
   

Однако ошибка все равно осталась. Итак, я вошел вручную и попытался получить доступ к группам из примерно 1000 нейронов, чтобы попытаться определить, какие нейроны были проблемой. В конце концов я понял, что мои проблемы начинаются с нейрона с номером 124375 и доходят до 135689. Для всех чисел между этими двумя я получаю ту же ошибку. Например, если я возьму какой-то другой номер 6 di git (115015, который также есть в списке), все будет работать нормально. Также работают все числа 5,4 или 3 di git. Кто-нибудь знает, почему API ведет себя так?

Это ссылка на NeuronID, к которой я пытаюсь получить доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...