Есть ли способ обработать пустой ответ в Python? - PullRequest
1 голос
/ 06 августа 2020

Я пытался получить подробные сведения о рекомендациях из API. Например, топ-5 соответствий

Код Colab для детального понимания

вызов API на основе кеширования

Ввод: значение улыбки: O = C (N1C = CN = C1) NC2 = N C (C) = C (C3 = CC = C (S (= O) (C) = O) C (F) = C3) Выход S2 Rea c = NC1 = CSC = C1 C (O C) = OO = C (Cl) CCl Reag = CCN- CC. C (Cl) Cl Rea c = NC1 = CSC = C1 C (O C) = OO = C (Cl) CCl Reag = [] Rea c = NC1 = CSC = C1 C (O C) = OO = C (Cl) CCl Reag = CCN- CC. C (Cl) Cl Rea c = NC1 = CSC = C1 C (O C) = OO = C (Cl) CCl Reag = []

Это значение

reac - ['O=C(OC(C)(C)C)NCCC(NC(C)(C)C)=O', 'O=[C]C(F)(F)F']
reag - ['']

При получении пустого значения в переменной reag выдается сообщение об ошибке

   File "C:\ProgramData\Anaconda3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None

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

Мой фактический лог c здесь

from cachetools import cached
from diskcache import Cache


BASE_URL = "https://ai.chemistryinthecloud.com/smilies/"
CACHEDIR = "api_cache"

@cached(cache=Cache(CACHEDIR))
def get_similies(value):
    return requests.get(BASE_URL + value).json()

def parse_eq(eq):
    reac, _, reag = (list(v.split(".")) for v in eq.partition(">"))
    print("reac -",reac)
    print("reag -",reag)
    print(type(reag[0]))
    return {
        "reactants": {i: get_similies(i) for i in reac},
        "reagents": {i: get_similies(i) for i in reag if i is not None}
    }

result = [parse_eq(eqs) for eqs in l]

Как пропустить пустое значение и go к следующему значению l oop?

...