Я пытался получить подробные сведения о рекомендациях из 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?